From owner-svn-src-user@FreeBSD.ORG Tue Feb 14 12:06:57 2012 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5457C106566C; Tue, 14 Feb 2012 12:06:57 +0000 (UTC) (envelope-from gabor@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 28CDD8FC14; Tue, 14 Feb 2012 12:06:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q1EC6v3D097438; Tue, 14 Feb 2012 12:06:57 GMT (envelope-from gabor@svn.freebsd.org) Received: (from gabor@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q1EC6uEW097436; Tue, 14 Feb 2012 12:06:56 GMT (envelope-from gabor@svn.freebsd.org) Message-Id: <201202141206.q1EC6uEW097436@svn.freebsd.org> From: Gabor Kovesdan Date: Tue, 14 Feb 2012 12:06:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r231674 - user/gabor/tre-integration/contrib/tre/lib X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Feb 2012 12:06:57 -0000 Author: gabor Date: Tue Feb 14 12:06:56 2012 New Revision: 231674 URL: http://svn.freebsd.org/changeset/base/231674 Log: - Fix possible segfaults by reading before or after the bounds of the input string - Fix a bug in the relative end offset of the context that caused that some matches were missing Modified: user/gabor/tre-integration/contrib/tre/lib/regexec.c Modified: user/gabor/tre-integration/contrib/tre/lib/regexec.c ============================================================================== --- user/gabor/tre-integration/contrib/tre/lib/regexec.c Tue Feb 14 12:03:23 2012 (r231673) +++ user/gabor/tre-integration/contrib/tre/lib/regexec.c Tue Feb 14 12:06:56 2012 (r231674) @@ -224,8 +224,8 @@ tre_match(const tre_tnfa_t *tnfa, const else { size_t rem = heur->tlen - (pmatch[0].rm_eo - pmatch[0].rm_so); - so = st + pmatch[0].rm_so - rem; - eo = st + pmatch[0].rm_eo + rem; + so = st + pmatch[0].rm_so <= rem ? 0 : st + pmatch[0].rm_so - rem; + eo = st + pmatch[0].rm_eo + rem >= len ? len : st + pmatch[0].rm_eo + rem; } SEEK_TO(so); @@ -247,7 +247,7 @@ tre_match(const tre_tnfa_t *tnfa, const if (ret != REG_OK) return ret; st += pmatch[0].rm_so; - n = pmatch[0].rm_eo; + n = pmatch[0].rm_eo - pmatch[0].rm_so; /* Intermediate heuristics */ while (!(heur->heurs[i] == NULL) && @@ -255,6 +255,8 @@ tre_match(const tre_tnfa_t *tnfa, const ((heur->heurs[i + 1] == NULL) && (heur->type == HEUR_PREFIX_ARRAY)))) { SEEK_TO(st + n); + if (len <= st + n) + return REG_NOMATCH; ret = tre_match_fast(heur->heurs[i], string, len - st - n, type, nmatch, pmatch, eflags); if (ret != REG_OK) @@ -267,6 +269,8 @@ tre_match(const tre_tnfa_t *tnfa, const if ((heur->type == HEUR_ARRAY) && heur->heurs[i] != NULL) { SEEK_TO(st + n); + if (len <= st + n) + return REG_NOMATCH; ret = tre_match_fast(heur->heurs[i], string, len - st - n, type, nmatch, pmatch, eflags); if (ret != REG_OK)