Ticket 167: [str] cached patterns lookup problem
Function pattern_lookup() uses incorrect algorithm to search cached pattern. If you have a cached pattern then this function will always select the last cached pattern for any patterns with the same hash values.
Please look at my patch fixing it.
--- str-0.9.12/str_parse.c 2008-04-29 10:02:26 UTC (rev 15300)
+++ str-0.9.12/str_parse.c 2008-04-29 10:03:37 UTC (rev 15301)
@@ -204,14 +204,15 @@
*p_pcre_extra = NULL;
h = hash_func(key, keylen);
- if ((he = pattern_hash[h]) == NULL)
- return;
- while (he->next != NULL) {
+ he = pattern_hash[h];
+ while (he != NULL) {
if (he->keylen == keylen)
if (memcmp(he->key, key, keylen))
break;
he = he->next;
}
+ if (he == NULL)
+ return;
*p_pcre = he->p_pcre;
*p_pcre_extra = he->p_pcre_extra;
return;
Remarks:
Thanks. You're right, the algorithm was broken. Now fixed by taken over your patch.
Properties:
Type: |
code |
|
Version: |
0.9.12 |
Status: |
fixed |
|
Created: |
2008-Apr-29 13:15 |
Severity: |
2 |
|
Last Change: |
2008-Jun-06 14:31 |
Priority: |
5 |
|
Subsystem: |
str |
Assigned To: |
rse |
|
Derived From: |
|
Creator: |
anonymous |