diff options
| author | Stefan Esser <sesser@php.net> | 2004-12-03 16:04:26 +0000 |
|---|---|---|
| committer | Stefan Esser <sesser@php.net> | 2004-12-03 16:04:26 +0000 |
| commit | 0520c88818a17bd4640fa95718307576d41f79da (patch) | |
| tree | 151dbf30c41470ef70595aa66657fa67d8fd86ee /ext/standard/var_unserializer.c | |
| parent | bc0b61d250301d84c6388a058f962045a7744e9d (diff) | |
| download | php-git-0520c88818a17bd4640fa95718307576d41f79da.tar.gz | |
MFH
Diffstat (limited to 'ext/standard/var_unserializer.c')
| -rw-r--r-- | ext/standard/var_unserializer.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c index 3a24111baa..40d9fc953e 100644 --- a/ext/standard/var_unserializer.c +++ b/ext/standard/var_unserializer.c @@ -205,9 +205,15 @@ static inline int process_nested_data(UNSERIALIZE_PARAMETER, HashTable *ht, int switch (Z_TYPE_P(key)) { case IS_LONG: + if (zend_hash_index_find(ht, Z_LVAL_P(key), (void **)&old_data)) { + var_replace(var_hash, old_data, rval); + } zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data), NULL); break; case IS_STRING: + if (zend_hash_find(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, (void **)&old_data)) { + var_replace(var_hash, old_data, rval); + } zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &data, sizeof(data), NULL); break; } @@ -882,6 +888,8 @@ yy86: return 0; } + if (*rval == *rval_ref) return 0; + if (*rval != NULL) { zval_ptr_dtor(rval); } |
