From f0c4283f47e11a572ab3f8a27a70440655a1b933 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 19 Mar 2008 03:12:39 +0000 Subject: [PATCH] MFB: Fixed bug #43614 (incorrect processing of numerical string keys of array in arbitrary serialized data) --- ext/standard/tests/serialize/bug43614.phpt | 21 +++++++++++++++++++++ ext/standard/var_unserializer.c | 6 +++--- ext/standard/var_unserializer.re | 4 ++-- 3 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 ext/standard/tests/serialize/bug43614.phpt diff --git a/ext/standard/tests/serialize/bug43614.phpt b/ext/standard/tests/serialize/bug43614.phpt new file mode 100644 index 0000000000..127dfba586 --- /dev/null +++ b/ext/standard/tests/serialize/bug43614.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #43614 (incorrect processing of numerical string keys of array in arbitrary serialized data) +--FILE-- + +--EXPECT-- +array(2) { + [10]=> + int(1) + ["01"]=> + int(2) +} +int(1) +int(2) diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c index 18fc14be16..21583553ef 100644 --- a/ext/standard/var_unserializer.c +++ b/ext/standard/var_unserializer.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.12.1 on Mon Aug 6 21:30:07 2007 */ +/* Generated by re2c 0.12.3 on Wed Mar 19 00:06:59 2008 */ #line 1 "ext/standard/var_unserializer.re" /* +----------------------------------------------------------------------+ @@ -326,10 +326,10 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long break; case IS_STRING: case IS_UNICODE: - if (zend_u_hash_find(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, (void **)&old_data)==SUCCESS) { + if (zend_u_symtable_find(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, (void **)&old_data)==SUCCESS) { var_push_dtor(var_hash, old_data); } - zend_u_hash_update(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, &data, sizeof(data), NULL); + zend_u_symtable_update(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, &data, sizeof(data), NULL); break; } diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index b50e2e5032..2f9041b5b1 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -330,10 +330,10 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, long break; case IS_STRING: case IS_UNICODE: - if (zend_u_hash_find(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, (void **)&old_data)==SUCCESS) { + if (zend_u_symtable_find(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, (void **)&old_data)==SUCCESS) { var_push_dtor(var_hash, old_data); } - zend_u_hash_update(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, &data, sizeof(data), NULL); + zend_u_symtable_update(ht, Z_TYPE_P(key), Z_UNIVAL_P(key), Z_UNILEN_P(key) + 1, &data, sizeof(data), NULL); break; } -- 2.40.0