From c63f18dd9b71a87c0958506e116a70790cc15c29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Tue, 2 Aug 2022 09:00:37 +0200 Subject: [PATCH] Unify ext/random unserialize errors with ext/date (#9185) * Unify ext/random unserialize errors with ext/date - Use `Error` instead of `Exception`. - Adjust wording. * Make `zend_read_property` silent in `Randomizer::__unserialize()` Having: > Error: Typed property Random\Randomizer::$engine must not be accessed before > initialization is not a value-add in this case. * Insert the actual class name in the unserialization error of Engines * Revert unserialization failure back to Exception from Error see https://news-web.php.net/php.internals/118311 --- ext/random/engine_mt19937.c | 6 +++--- ext/random/randomizer.c | 6 +++--- .../tests/02_engine/all_serialize_error.phpt | 16 ++++++++-------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ext/random/engine_mt19937.c b/ext/random/engine_mt19937.c index 609efae861b..aa791882e1d 100644 --- a/ext/random/engine_mt19937.c +++ b/ext/random/engine_mt19937.c @@ -357,7 +357,7 @@ PHP_METHOD(Random_Engine_Mt19937, __unserialize) /* members */ t = zend_hash_index_find(d, 0); if (!t || Z_TYPE_P(t) != IS_ARRAY) { - zend_throw_exception(NULL, "Incomplete or ill-formed serialization data", 0); + zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(engine->std.ce->name)); RETURN_THROWS(); } object_properties_load(&engine->std, Z_ARRVAL_P(t)); @@ -365,11 +365,11 @@ PHP_METHOD(Random_Engine_Mt19937, __unserialize) /* state */ t = zend_hash_index_find(d, 1); if (!t || Z_TYPE_P(t) != IS_ARRAY) { - zend_throw_exception(NULL, "Incomplete or ill-formed serialization data", 0); + zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(engine->std.ce->name)); RETURN_THROWS(); } if (!engine->algo->unserialize(engine->status, Z_ARRVAL_P(t))) { - zend_throw_exception(NULL, "Engine unserialize failed", 0); + zend_throw_exception_ex(NULL, 0, "Invalid serialization data for %s object", ZSTR_VAL(engine->std.ce->name)); RETURN_THROWS(); } } diff --git a/ext/random/randomizer.c b/ext/random/randomizer.c index 2672477fecc..39b60dceccc 100644 --- a/ext/random/randomizer.c +++ b/ext/random/randomizer.c @@ -282,14 +282,14 @@ PHP_METHOD(Random_Randomizer, __unserialize) members_zv = zend_hash_index_find(d, 0); if (!members_zv || Z_TYPE_P(members_zv) != IS_ARRAY) { - zend_throw_exception(NULL, "Incomplete or ill-formed serialization data", 0); + zend_throw_exception(NULL, "Invalid serialization data for Random\\Randomizer object", 0); RETURN_THROWS(); } object_properties_load(&randomizer->std, Z_ARRVAL_P(members_zv)); - zengine = zend_read_property(randomizer->std.ce, &randomizer->std, "engine", strlen("engine"), 0, NULL); + zengine = zend_read_property(randomizer->std.ce, &randomizer->std, "engine", strlen("engine"), 1, NULL); if (Z_TYPE_P(zengine) != IS_OBJECT || !instanceof_function(Z_OBJCE_P(zengine), random_ce_Random_Engine)) { - zend_throw_exception(NULL, "Incomplete or ill-formed serialization data", 0); + zend_throw_exception(NULL, "Invalid serialization data for Random\\Randomizer object", 0); RETURN_THROWS(); } diff --git a/ext/random/tests/02_engine/all_serialize_error.phpt b/ext/random/tests/02_engine/all_serialize_error.phpt index 082b99e9529..adafe53e265 100644 --- a/ext/random/tests/02_engine/all_serialize_error.phpt +++ b/ext/random/tests/02_engine/all_serialize_error.phpt @@ -65,13 +65,13 @@ try { ?> --EXPECT-- Random\Engine\Mt19937 -Engine unserialize failed -Engine unserialize failed -Engine unserialize failed -Engine unserialize failed +Invalid serialization data for Random\Engine\Mt19937 object +Invalid serialization data for Random\Engine\Mt19937 object +Invalid serialization data for Random\Engine\Mt19937 object +Invalid serialization data for Random\Engine\Mt19937 object Random\Engine\PcgOneseq128XslRr64 -Engine unserialize failed -Engine unserialize failed +Invalid serialization data for Random\Engine\PcgOneseq128XslRr64 object +Invalid serialization data for Random\Engine\PcgOneseq128XslRr64 object Random\Engine\Xoshiro256StarStar -Engine unserialize failed -Engine unserialize failed +Invalid serialization data for Random\Engine\Xoshiro256StarStar object +Invalid serialization data for Random\Engine\Xoshiro256StarStar object