From 4815bf6068b5a2623c50475e0e5ec598709934e0 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 4 Mar 2010 11:25:59 +0100 Subject: [PATCH 1/1] grs1: avoid term_len < 0 for .abs operator 'range' A negative term_len could happen for Zebra in many releases but it only reveals itself in YAZ 4 where WRBUF uses size_t length. --- index/recgrs.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/index/recgrs.c b/index/recgrs.c index a481e1d..500a0b1 100644 --- a/index/recgrs.c +++ b/index/recgrs.c @@ -104,12 +104,18 @@ static int sp_range(struct source_parser *sp, data1_node *n, RecWord *wrd) return 0; sp_lex(sp); - if (wrd->term_buf && wrd->term_len) + if (wrd->term_buf) { - wrd->term_buf += start; - wrd->term_len -= start; - if (wrd->term_len > len) - wrd->term_len = len; + if (start >= wrd->term_len) + wrd->term_len = 0; + else + { + wrd->term_len -= start; + wrd->term_buf += start; + + if (wrd->term_len > len) + wrd->term_len = len; + } } return 1; } @@ -563,7 +569,7 @@ static void index_xpath(struct source_parser *sp, data1_node *n, memcpy(&wrd_tl, wrd, sizeof(*wrd)); if (tl->source) sp_parse(sp, n, &wrd_tl, tl->source); - + /* this is just the old fashioned attribute based index */ wrd_tl.index_name = tl->index_name; if (p->flagShowRecords) -- 1.7.10.4