From 8264eedc488dec7e24a4e12e6ca8fc8c675ef10b Mon Sep 17 00:00:00 2001 From: Andi Gutmans Date: Wed, 30 Jul 2003 19:47:39 +0000 Subject: [PATCH] - Fix problem with hash when updating same bucket with data of different sizes one after another. - Fix number of arguments to read_dimension. --- Zend/zend_execute.c | 2 +- Zend/zend_hash.c | 29 ++++++++++++++++------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 890c838667..fe36c4bb68 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1486,7 +1486,7 @@ static inline int zend_binary_assign_op_obj_helper(int (*binary_op)(zval *result z = Z_OBJ_HT_P(object)->read_property(object, property, 0 TSRMLS_CC); break; case ZEND_ASSIGN_DIM: - z = Z_OBJ_HT_P(object)->read_dimension(object, property, 0 TSRMLS_CC); + z = Z_OBJ_HT_P(object)->read_dimension(object, property TSRMLS_CC); break; } SEPARATE_ZVAL_IF_NOT_REF(&z); diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index ac53af332a..95d946d053 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -100,19 +100,22 @@ ZEND_API ulong zend_hash_func(char *arKey, uint nKeyLength) } -#define UPDATE_DATA(ht, p, pData, nDataSize) \ - if (nDataSize == sizeof(void*)) { \ - if (!(p)->pDataPtr) { \ - pefree((p)->pData, (ht)->persistent); \ - } \ - memcpy(&(p)->pDataPtr, pData, sizeof(void *)); \ - (p)->pData = &(p)->pDataPtr; \ - } else { \ - if ((p)->pDataPtr) { \ - (p)->pData = (void *) pemalloc(nDataSize, (ht)->persistent); \ - (p)->pDataPtr=NULL; \ - } \ - memcpy((p)->pData, pData, nDataSize); \ +#define UPDATE_DATA(ht, p, pData, nDataSize) \ + if (nDataSize == sizeof(void*)) { \ + if (!(p)->pDataPtr) { \ + pefree((p)->pData, (ht)->persistent); \ + } \ + memcpy(&(p)->pDataPtr, pData, sizeof(void *)); \ + (p)->pData = &(p)->pDataPtr; \ + } else { \ + if (!(p)->pDataPtr) { \ + (p)->pData = (void *) pemalloc(nDataSize, (ht)->persistent); \ + (p)->pDataPtr=NULL; \ + } else { \ + (p)->pData = (void *) perealloc((p)->pData, nDataSize, (ht)->persistent); \ + /* (p)->pDataPtr is already NULL so no need to initialize it */ \ + } \ + memcpy((p)->pData, pData, nDataSize); \ } #define INIT_DATA(ht, p, pData, nDataSize); \ -- 2.40.0