]> granicus.if.org Git - php/commitdiff
- Fix problem with hash when updating same bucket with data of different
authorAndi Gutmans <andi@php.net>
Wed, 30 Jul 2003 19:47:39 +0000 (19:47 +0000)
committerAndi Gutmans <andi@php.net>
Wed, 30 Jul 2003 19:47:39 +0000 (19:47 +0000)
  sizes one after another.
- Fix number of arguments to read_dimension.

Zend/zend_execute.c
Zend/zend_hash.c

index 890c838667e5519b99139b9280c55301472bc8ed..fe36c4bb68a71586c236287448b3fdd9ca1464ae 100644 (file)
@@ -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);
index ac53af332a1d0728ae1e0e24d8233afe7ff1601c..95d946d053be31e410677836743f0ce44a20e990 100644 (file)
@@ -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);                                                            \