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.netIndex: 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-2024 The PHP Group All rights reserved. |
Last updated: Thu Nov 21 17:01:32 2024 UTC |