|
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 15:24 UTC Return to Bug #50816 | Download this patchThis patch is obsolete Obsoleted by 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,25 @@
}
if (mode != HASH_UPDATE_KEY_ANYWAY) {
- Bucket *q = ht->arBuckets[num_index & ht->nTableMask];
- int found = 0;
+ Bucket *q, *t;
+ int before = 0;
+ q = ht->arBuckets[num_index & ht->nTableMask];
+ t = ht->pListHead;
+ while (t) {
+ if (t == q) {
+ before = 1;
+ break;
+ }
+ if (t == p) {
+ break;
+ }
+ t = t->pListNext;
+ }
+
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 +1241,27 @@
}
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;
+ q = ht->arBuckets[h & ht->nTableMask];
+ t = ht->pListHead;
+ while (t) {
+ if (t == q) {
+ before = 1;
+ break;
+ }
+ if (t == p) {
+ break;
+ }
+ t = t->pListNext;
+ }
+
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: Sat Oct 25 13:00:01 2025 UTC |