From: Adam Dickmeiss Date: Tue, 7 Feb 2006 00:17:44 +0000 (+0000) Subject: Fix dfa_match_first to avoid match past nul byte X-Git-Tag: before.bug.529~256 X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=commitdiff_plain;h=25cf3bc85f9df25a4fc36707cc80a77fe6f35c83;hp=9be04e6cf1e848fcc4f065a7407e489684aaaf61 Fix dfa_match_first to avoid match past nul byte --- diff --git a/buildconf.sh b/buildconf.sh index f6560e6..d409b79 100755 --- a/buildconf.sh +++ b/buildconf.sh @@ -1,5 +1,5 @@ #!/bin/sh -# $Id: buildconf.sh,v 1.13 2005-03-04 12:00:06 adam Exp $ +# $Id: buildconf.sh,v 1.14 2006-02-07 00:17:44 adam Exp $ set -x dir=`aclocal --print-ac-dir` aclocal -I . @@ -18,7 +18,7 @@ sh_flags="" conf_flags="" case $1 in -d) - sh_flags="-g -Wall" + sh_flags="-g -Wall -O0" enable_configure=true enable_help=false shift diff --git a/data1/d1_absyn.c b/data1/d1_absyn.c index dfe0484..4a008df 100644 --- a/data1/d1_absyn.c +++ b/data1/d1_absyn.c @@ -1,4 +1,4 @@ -/* $Id: d1_absyn.c,v 1.22 2006-02-06 23:22:28 adam Exp $ +/* $Id: d1_absyn.c,v 1.23 2006-02-07 00:17:44 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -443,7 +443,6 @@ static const char * mk_xpath_regexp (data1_handle dh, const char *expr) { const char *p = expr; int abs = 1; - int i; int e = 0; char *stack[32]; char *res_p, *res = 0; @@ -491,9 +490,9 @@ static const char * mk_xpath_regexp (data1_handle dh, const char *expr) res_p = res = nmem_malloc(data1_nmem_get(dh), res_size + 10); if (stack[e-1][0] == '@') /* path/@attr spec (leaf is attribute) */ - sprintf(res_p, "/"); + strcpy(res_p, "/"); else - sprintf(res_p, "[^@]*/"); /* path .. (index all cdata below it) */ + strcpy(res_p, "[^@]*/"); /* path .. (index all cdata below it) */ res_p = res_p + strlen(res_p); while (--e >= 0) { sprintf(res_p, "%s/", stack[e]); diff --git a/recctrl/recgrs.c b/recctrl/recgrs.c index df538ce..da1ad60 100644 --- a/recctrl/recgrs.c +++ b/recctrl/recgrs.c @@ -1,4 +1,4 @@ -/* $Id: recgrs.c,v 1.107 2006-02-06 23:22:29 adam Exp $ +/* $Id: recgrs.c,v 1.108 2006-02-07 00:17:44 adam Exp $ Copyright (C) 1995-2005 Index Data ApS @@ -350,6 +350,7 @@ static int dfa_match_first(struct DFA_state **dfaar, const char *text) unsigned char c; for (c = *p++, t = s->trans, i = s->tran_no; --i >= 0; t++) + { if (c >= t->ch[0] && c <= t->ch[1]) { while (i >= 0) @@ -359,12 +360,15 @@ static int dfa_match_first(struct DFA_state **dfaar, const char *text) if (s->rule_no) return 1; /* next char */ + if (!c) + return 0; c = *p++; for (t = s->trans, i = s->tran_no; --i >= 0; t++) if (c >= t->ch[0] && c <= t->ch[1]) break; } } + } return 0; }