[kaffe] String problem / NullPointerException in KJC
Helmer Krämer
hkraemer@freenet.de
Thu Jul 3 09:08:01 2003
On Wed, 2 Jul 2003 21:08:05 +0100
Guilhem Lavaux <guilhem.lavaux@free.fr> wrote:
Hi,
> I then wondered if this may be caused by the original Boyer-Moore algorithm
> implemented in Kaffe and so I tried to shutdown it: the problem disappeared.
> Looking at the code I am a little surprised of one statement which can cause
> an "overread" of a string buffer:
>
> k= n - m+1;
> ^^^^^^^^^^^^^^
> for ( i=offset; i <= k; ) {
> if ( memcmp( &a[i], p, m2) == 0 )
> return i;
> i += bs[ (unsigned char)a[i+m] ];
> ^^^^^^^^^^^
> }
>
> It seems that it is possible the algorithm wants to fetch a[n+1] and this may
> cause the NullPointerException. Changing i<=k in i<k solves the problem for
> KJC although I do know if it is the right to do because I am not really aware
> of the Boyer-Moore algorithm.
>
> Any comments ? I included the log of KJC during the compilation of the core
> classes.
i think even i<k is still wrong ;) n Is the length of the string
and m is the length of the pattern, so the largest possible start
index of the pattern is n-m-1. Therefore it should be n-m-1 and
<=k or n-m and <k, shouldn't it?
Greetings,
Helmer