apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Cliff Woolley <jwool...@virginia.edu>
Subject Re: match_boyer_moore_horspool() looping on icarus
Date Fri, 24 May 2002 00:32:17 GMT
On Thu, 23 May 2002, Cliff Woolley wrote:

> (gdb) bt
> #0  match_boyer_moore_horspool (this_pattern=0x8111cf0,
>     s=0x8161dc4 "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; )",
>     slen=58) at apr_strmatch.c:133
> #1  0x806a616 in match_headers (r=0x8161048) at mod_setenvif.c:567
>
> (gdb) info locals
> s_tmp = 0x8161df7 ")"
> p_tmp = 0x8111ce8 "2"
> s_end = 0x8161dfe ""
> shift = (int *) 0x8111d00
> s_next = 0x8161df7 ")"
> p_start = 0x8111ce0 "Mozilla/2"
> p_end = 0x8111ce8 "2"

Okay, the while loop is definitely spinning forever:
(gdb)
122         while (s_next < s_end) {
(gdb)
123             const char *s_tmp = s_next;
(gdb)
124             const char *p_tmp = p_end;
(gdb)
125             while (*s_tmp == *p_tmp) {
(gdb)
132             s_next += shift[(int)*s_next];
(gdb)
133         }
(gdb)
122         while (s_next < s_end) {
(gdb)
123             const char *s_tmp = s_next;
(gdb)
124             const char *p_tmp = p_end;
(gdb)
125             while (*s_tmp == *p_tmp) {
(gdb)
132             s_next += shift[(int)*s_next];
(gdb)
133         }

And yes, s_next *is* less than s_end.  So the question is: why doesn't
s_next get incremented?

(gdb) p *s_next
$3 = -71 ''
(gdb) p shift[*s_next]
$4 = 0

Ah.  Oops.

(Note that -71 is a non-printable superscript 1 or something.)

Perhaps s_next needs to be unsigned?

--Cliff

--------------------------------------------------------------
   Cliff Woolley
   cliffwoolley@yahoo.com
   Charlottesville, VA



Mime
View raw message