Skip to content

Commit

Permalink
[TEXTSEARCH]: Fix Boyer Moore initialization bug
Browse files Browse the repository at this point in the history
The pattern is set after trying to compute the prefix table, which tries
to use it. Initialize it before calling compute_prefix_tbl, make
compute_prefix_tbl consistently use only the data from struct ts_bm
and remove the now unnecessary arguments.

Signed-off-by: Michael Rash <mbr@cipherdyne.org>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Michael Rash authored and David S. Miller committed Aug 22, 2006
1 parent 316c159 commit 3ffaa8c
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions lib/ts_bm.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,15 +111,14 @@ static int subpattern(u8 *pattern, int i, int j, int g)
return ret;
}

static void compute_prefix_tbl(struct ts_bm *bm, const u8 *pattern,
unsigned int len)
static void compute_prefix_tbl(struct ts_bm *bm)
{
int i, j, g;

for (i = 0; i < ASIZE; i++)
bm->bad_shift[i] = len;
for (i = 0; i < len - 1; i++)
bm->bad_shift[pattern[i]] = len - 1 - i;
bm->bad_shift[i] = bm->patlen;
for (i = 0; i < bm->patlen - 1; i++)
bm->bad_shift[bm->pattern[i]] = bm->patlen - 1 - i;

/* Compute the good shift array, used to match reocurrences
* of a subpattern */
Expand Down Expand Up @@ -150,8 +149,8 @@ static struct ts_config *bm_init(const void *pattern, unsigned int len,
bm = ts_config_priv(conf);
bm->patlen = len;
bm->pattern = (u8 *) bm->good_shift + prefix_tbl_len;
compute_prefix_tbl(bm, pattern, len);
memcpy(bm->pattern, pattern, len);
compute_prefix_tbl(bm);

return conf;
}
Expand Down

0 comments on commit 3ffaa8c

Please sign in to comment.