| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
 Patch bug50816.patch for Scripting Engine problem Bug #50816Patch version 2011-07-30 16:06 UTC Return to Bug #50816 | Download this patchThis patch renders other patches obsolete Obsolete patches: Patch Revisions:Developer: laruence@php.net
Index: Zend/zend_hash.c
===================================================================
--- Zend/zend_hash.c	(revision 313966)
+++ Zend/zend_hash.c	(working copy)
@@ -1187,14 +1187,26 @@
 			}
 
 			if (mode != HASH_UPDATE_KEY_ANYWAY) {
-				Bucket *q = ht->arBuckets[num_index & ht->nTableMask];
-				int found = 0;
+				Bucket *q, *t;
+				int before = 0;
 
+				t = ht->pListHead;
+				while (t) {
+					if (!t->nKeyLength && t->h == num_index) {
+						before = 1;
+						break;
+					}
+					if (t == p) {
+						break;
+					}
+					t = t->pListNext;
+				}
+
+				q = ht->arBuckets[num_index & ht->nTableMask];
+
 				while (q != NULL) {
-					if (q == p) {
-						found = 1;
-					} else if (!q->nKeyLength && q->h == num_index) {
-						if (found) {
+					if (!q->nKeyLength && q->h == num_index) {
+						if (before) {
 							if (mode & HASH_UPDATE_KEY_IF_BEFORE) {
 								break;
 							} else {
@@ -1230,16 +1242,29 @@
 			}
 
 			if (mode != HASH_UPDATE_KEY_ANYWAY) {
+				Bucket *q, *t;
+				int before = 0;
 				ulong h = zend_inline_hash_func(str_index, str_length);
-				Bucket *q = ht->arBuckets[h & ht->nTableMask];
-				int found = 0;
 
+				t = ht->pListHead;
+				while (t) {
+					if (t->h == h && t->nKeyLength == str_length &&
+							memcmp(t->arKey, str_index, str_length) == 0) {
+						before = 1;
+						break;
+					}
+					if (t == p) {
+						break;
+					}
+					t = t->pListNext;
+				}
+
+				q = ht->arBuckets[h & ht->nTableMask];
+
 				while (q != NULL) {
-					if (q == p) {
-						found = 1;
-					} else if (q->h == h && q->nKeyLength == str_length && 
+					if (q->h == h && q->nKeyLength == str_length && 
 					           memcmp(q->arKey, str_index, str_length) == 0) {
-					    if (found) {
+					    if (before) {
 							if (mode & HASH_UPDATE_KEY_IF_BEFORE) {
 								break;
 							} else {
         | 
    
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 07:00:01 2025 UTC |