Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Feb 2012 16:12:50 +0000 (UTC)
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r232222 - user/gabor/tre-integration/contrib/tre/lib
Message-ID:  <201202271612.q1RGCoK2026015@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gabor
Date: Mon Feb 27 16:12:49 2012
New Revision: 232222
URL: http://svn.freebsd.org/changeset/base/232222

Log:
  - Avoid segfaults by adding and extra condition and initializing variables
    with NULL

Modified:
  user/gabor/tre-integration/contrib/tre/lib/mregcomp.c
  user/gabor/tre-integration/contrib/tre/lib/mregexec.c

Modified: user/gabor/tre-integration/contrib/tre/lib/mregcomp.c
==============================================================================
--- user/gabor/tre-integration/contrib/tre/lib/mregcomp.c	Mon Feb 27 16:12:00 2012	(r232221)
+++ user/gabor/tre-integration/contrib/tre/lib/mregcomp.c	Mon Feb 27 16:12:49 2012	(r232222)
@@ -58,11 +58,12 @@ tre_mcompile(mregex_t *preg, size_t nr, 
 	     size_t *wn, const char **regex, size_t *n, int cflags)
 {
   int ret;
-  const wchar_t **frags;
-  size_t *siz;
-  wmsearch_t *wm;
+  const wchar_t **frags = NULL;
+  size_t *siz = NULL;
+  wmsearch_t *wm = NULL;
 
   preg->k = nr;
+  preg->searchdata = NULL;
   preg->patterns = xmalloc(nr * sizeof(regex_t));
   if (!preg->patterns)
     return REG_ESPACE;
@@ -152,7 +153,7 @@ err:
     xfree(wm);
 
 finish:
-  if (!(cflags & REG_LITERAL))
+  if (!(cflags & REG_LITERAL) && !(preg->type == MHEUR_SINGLE))
     {
       if (frags)
 	xfree(frags);
@@ -168,8 +169,8 @@ tre_mregncomp(mregex_t *preg, size_t nr,
 {
   int i, ret;
   const wchar_t **wr;
-  wchar_t **wregex;
-  size_t *wlen;
+  wchar_t **wregex = NULL;
+  size_t *wlen = NULL;
 
   wregex = xmalloc(nr * sizeof(wchar_t *));
   if (!wregex)
@@ -226,8 +227,8 @@ tre_mregwncomp(mregex_t *preg, size_t nr
 {
   int i, ret;
   const char **sr;
-  char **sregex;
-  size_t *slen;
+  char **sregex = NULL;
+  size_t *slen = NULL;
 
   sregex = xmalloc(nr * sizeof(char *));
   if (!sregex)

Modified: user/gabor/tre-integration/contrib/tre/lib/mregexec.c
==============================================================================
--- user/gabor/tre-integration/contrib/tre/lib/mregexec.c	Mon Feb 27 16:12:00 2012	(r232221)
+++ user/gabor/tre-integration/contrib/tre/lib/mregexec.c	Mon Feb 27 16:12:49 2012	(r232222)
@@ -58,7 +58,7 @@ tre_mmatch(const void *str, size_t len, 
   int ret;
   bool need_offsets;
 
-  need_offsets = (((wmsearch_t *)(preg->searchdata))->cflags & REG_NOSUB) &&
+  need_offsets = (preg->searchdata && ((wmsearch_t *)(preg->searchdata))->cflags & REG_NOSUB) &&
 		 (nmatch > 0);
 
 #define INPUT(pos) ((type == STR_WIDE) ? (const void *)&str_wide[pos] : \



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202271612.q1RGCoK2026015>