Skip to content

Commit b4cc99b

Browse files
committed
Fix last commit, add test for specific unserialize errors.
1 parent ca2a8a7 commit b4cc99b

File tree

3 files changed

+46
-10
lines changed

3 files changed

+46
-10
lines changed

ext/hash/hash_sha3.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ const php_hash_ops php_hash_sha3_##bits##_ops = { \
293293

294294
static int php_keccak_serialize(const php_hashcontext_object *hash, zend_long *magic, zval *zv)
295295
{
296-
if (PHP_SERIALIZE_MAGIC_KECCAK != 0) {
296+
if (PHP_HASH_SERIALIZE_MAGIC_KECCAK != 0) {
297297
*magic = PHP_HASH_SERIALIZE_MAGIC_KECCAK;
298298
return php_hash_serialize_spec(hash, zv, PHP_KECCAK_SPEC);
299299
} else {

ext/hash/tests/hash_serialize_001.phpt

-9
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,6 @@ foreach ($algos as $algo) {
3737
var_dump(hash_final($copy));
3838
}
3939

40-
// errors: cannot unserialize onto an already-initialized object
41-
$ctx = hash_init("sha256");
42-
try {
43-
$ctx->__unserialize($ctx->__serialize());
44-
} catch (Exception $e) {
45-
var_dump($e->getMessage());
46-
}
47-
4840
echo "Done\n";
4941
?>
5042
--EXPECT--
@@ -366,5 +358,4 @@ string(56) "bc674d465a822817d939f19b38edde083fe5668759836c203c56e3e4"
366358
string(10) "haval256,5"
367359
string(64) "da70ad9bd09ed7c9675329ea2b5279d57761807c7aeac6340d94b5d494809457"
368360
string(64) "da70ad9bd09ed7c9675329ea2b5279d57761807c7aeac6340d94b5d494809457"
369-
string(55) "HashContext::__unserialize called on initialized object"
370361
Done
+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
--TEST--
2+
Hash: serialization errors
3+
--FILE--
4+
<?php
5+
6+
// cannot unserialize onto an already-initialized object
7+
$ctx = hash_init("sha256");
8+
try {
9+
$ctx->__unserialize($ctx->__serialize());
10+
} catch (Exception $e) {
11+
echo $e->getMessage(), "\n";
12+
}
13+
14+
// bad formats
15+
foreach ([
16+
"TzoxMToiSGFzaENvbnRleHQiOjA6e30=", // no contents
17+
"TzoxMToiSGFzaENvbnRleHQiOjU6e2k6MDtpOjE7aToxO2k6MDtpOjI7YTo4OntpOjA7aToxNzMyNTg0MTkzO2k6MTtpOi0yNzE3MzM4Nzk7aToyO2k6LTE3MzI1ODQxOTQ7aTozO2k6MjcxNzMzODc4O2k6NDtpOi0xMDA5NTg5Nzc2O2k6NTtpOjIwMDtpOjY7aTowO2k6NztzOjY0OiJJIGNhbid0IHJlbWVtYmVyIGFueXRoaW5nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIjt9aTozO2k6MjtpOjQ7YTowOnt9fQ==", // algorithm is int
18+
"TzoxMToiSGFzaENvbnRleHQiOjU6e2k6MDtzOjQ6InNoYTEiO2k6MTtzOjA6IiI7aToyO2E6ODp7aTowO2k6MTczMjU4NDE5MztpOjE7aTotMjcxNzMzODc5O2k6MjtpOi0xNzMyNTg0MTk0O2k6MztpOjI3MTczMzg3ODtpOjQ7aTotMTAwOTU4OTc3NjtpOjU7aToyMDA7aTo2O2k6MDtpOjc7czo2NDoiSSBjYW4ndCByZW1lbWJlciBhbnl0aGluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI7fWk6MztpOjI7aTo0O2E6MDp7fX0=", // flags are string
19+
"TzoxMToiSGFzaENvbnRleHQiOjU6e2k6MDtzOjQ6InNoYTEiO2k6MTtpOjE7aToyO2E6ODp7aTowO2k6MTczMjU4NDE5MztpOjE7aTotMjcxNzMzODc5O2k6MjtpOi0xNzMyNTg0MTk0O2k6MztpOjI3MTczMzg3ODtpOjQ7aTotMTAwOTU4OTc3NjtpOjU7aToyMDA7aTo2O2k6MDtpOjc7czo2NDoiSSBjYW4ndCByZW1lbWJlciBhbnl0aGluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI7fWk6MztpOjI7aTo0O2E6MDp7fX0=", // flags indicate HASH_HMAC
20+
"TzoxMToiSGFzaENvbnRleHQiOjU6e2k6MDtzOjQ6InNoYTEiO2k6MTtpOjI7aToyO3M6MTA6ImFiY2RlZmdoaWoiO2k6MztpOjI7aTo0O2E6MDp7fX0=", // serialization format wrong
21+
"TzoxMToiSGFzaENvbnRleHQiOjU6e2k6MDtzOjQ6InNoYTEiO2k6MTtpOjA7aToyO2E6ODp7aTowO2k6MTczMjU4NDE5MztpOjE7aTotMjcxNzMzODc5O2k6MjtpOi0xNzMyNTg0MTk0O2k6MztpOjI3MTczMzg3ODtpOjQ7aTotMTAwOTU4OTc3NjtpOjU7aToyMDA7aTo2O3M6MDoiIjtpOjc7czo2NDoiSSBjYW4ndCByZW1lbWJlciBhbnl0aGluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI7fWk6MztpOjI7aTo0O2E6MDp7fX0=", // serialization internals wrong
22+
"TzoxMToiSGFzaENvbnRleHQiOjU6e2k6MDtzOjQ6InNoYTEiO2k6MTtpOjA7aToyO2E6ODp7aTowO2k6MTczMjU4NDE5MztpOjE7aTotMjcxNzMzODc5O2k6MjtpOi0xNzMyNTg0MTk0O2k6MztpOjI3MTczMzg3ODtpOjQ7aTotMTAwOTU4OTc3NjtpOjU7aToyMDA7aTo2O2k6MDtpOjc7czo2NDoiSSBjYW4ndCByZW1lbWJlciBhbnl0aGluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI7fWk6MztpOjA7aTo0O2E6MDp7fX0=", // bad magic number
23+
"TzoxMToiSGFzaENvbnRleHQiOjU6e2k6MDtzOjQ6Inh4eDEiO2k6MTtpOjA7aToyO2E6ODp7aTowO2k6MTczMjU4NDE5MztpOjE7aTotMjcxNzMzODc5O2k6MjtpOi0xNzMyNTg0MTk0O2k6MztpOjI3MTczMzg3ODtpOjQ7aTotMTAwOTU4OTc3NjtpOjU7aToyMDA7aTo2O2k6MDtpOjc7czo2NDoiSSBjYW4ndCByZW1lbWJlciBhbnl0aGluZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACI7fWk6MztpOjI7aTo0O2E6MDp7fX0=" // bad algorithm
24+
] as $serial) {
25+
try {
26+
$ctx = unserialize(base64_decode($serial));
27+
echo "Unexpected success\n";
28+
} catch (Exception $e) {
29+
echo $e->getMessage(), "\n";
30+
}
31+
}
32+
33+
echo "Done\n";
34+
?>
35+
--EXPECT--
36+
HashContext::__unserialize called on initialized object
37+
Incomplete or ill-formed serialization data
38+
Incomplete or ill-formed serialization data
39+
Incomplete or ill-formed serialization data
40+
HashContext with HASH_HMAC option cannot be serialized
41+
Incomplete or ill-formed serialization data ("sha1" code -1)
42+
Incomplete or ill-formed serialization data ("sha1" code -1024)
43+
Incomplete or ill-formed serialization data ("sha1" code -1)
44+
Unknown hash algorithm
45+
Done

0 commit comments

Comments
 (0)