Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Feb 2012 18:42:07 +0000 (UTC)
From:      Gabor Kovesdan <gabor@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r232188 - user/gabor/tre-integration/contrib/tre/lib
Message-ID:  <201202261842.q1QIg75A077975@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gabor
Date: Sun Feb 26 18:42:07 2012
New Revision: 232188
URL: http://svn.freebsd.org/changeset/base/232188

Log:
  - Fix memory leaks
  - More consistent variable naming

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

Modified: user/gabor/tre-integration/contrib/tre/lib/mregcomp.c
==============================================================================
--- user/gabor/tre-integration/contrib/tre/lib/mregcomp.c	Sun Feb 26 17:39:46 2012	(r232187)
+++ user/gabor/tre-integration/contrib/tre/lib/mregcomp.c	Sun Feb 26 18:42:07 2012	(r232188)
@@ -73,7 +73,7 @@ tre_mcompile(mregex_t *preg, size_t nr, 
       ret = tre_compile(&preg->patterns[i], wregex[i], wn[i],
 			regex[i], n[i], cflags);
       if (ret != REG_OK)
-	return ret;
+	goto err;
     }
 
   /* If not literal, check if any of them have fixed-length prefix. */
@@ -167,21 +167,27 @@ tre_mregncomp(mregex_t *preg, size_t nr,
     return REG_ESPACE;
   wlen = xmalloc(nr * sizeof(size_t));
   if (!wlen)
-    return REG_ESPACE;
+    goto err;
 
   for (i = 0; i < nr; i++)
     {
       ret = tre_convert_pattern_to_wcs(regex[i], n[i], &wregex[i], &wlen[i]);
       if (ret != REG_OK)
-	goto fail;
+	goto err;
     }
 
   wr = (const wchar_t **)wregex;
   ret = tre_mcompile(preg, nr, wr, wlen, regex, n, cflags);
 
-fail:
-  for (int j = 0; j < i; j++)
-    tre_free_wcs_pattern(wregex[j]);
+err:
+  if (wregex)
+    {
+      for (int j = 0; j < i; j++)
+	if (wregex[j])
+	  tre_free_wcs_pattern(wregex[j]);
+    }
+  if (wlen)
+    xfree(wlen);
   return ret;
 }
 
@@ -189,17 +195,17 @@ int
 tre_mregcomp(mregex_t *preg, size_t nr, const char **regex, int cflags)
 {
   int ret;
-  size_t *wlen;
+  size_t *len;
 
-  wlen = xmalloc(nr * sizeof(size_t));
-  if (!wlen)
+  len = xmalloc(nr * sizeof(size_t));
+  if (!len)
     return REG_ESPACE;
 
   for (int i = 0; i < nr; i++)
-    wlen[i] = strlen(regex[i]);
+    len[i] = strlen(regex[i]);
 
-  ret = tre_mregncomp(preg, nr, regex, wlen, cflags);
-  xfree(wlen);
+  ret = tre_mregncomp(preg, nr, regex, len, cflags);
+  xfree(len);
   return ret;
 }
 
@@ -219,21 +225,27 @@ tre_mregwncomp(mregex_t *preg, size_t nr
     return REG_ESPACE;
   slen = xmalloc(nr * sizeof(size_t));
   if (!slen)
-    return REG_ESPACE;
+    goto err;
 
   for (i = 0; i < nr; i++)
     {
       ret = tre_convert_pattern_to_mbs(regex[i], n[i], &sregex[i], &slen[i]);
       if (ret != REG_OK)
-        goto fail;
+        goto err;
     }
 
   sr = (const char **)sregex;
   ret = tre_mcompile(preg, nr, regex, n, sr, slen, cflags);
 
-fail:
-  for (int j = 0; j < i; j++)
-    tre_free_mbs_pattern(sregex[j]);
+err:
+  if (sregex)
+    {
+      for (int j = 0; j < i; j++)
+	if (sregex[j])
+	  tre_free_mbs_pattern(sregex[j]);
+    }
+  if (slen)
+    xfree(slen);
   return ret;
 }
 
@@ -242,17 +254,17 @@ tre_mregwcomp(mregex_t *preg, size_t nr,
 	      int cflags)
 {
   int ret;
-  size_t *wlen;
+  size_t *len;
 
-  wlen = xmalloc(nr * sizeof(size_t));
-  if (!wlen)
+  len = xmalloc(nr * sizeof(size_t));
+  if (!len)
     return REG_ESPACE;
 
   for (int i = 0; i < nr; i++)
-    wlen[i] = tre_strlen(regex[i]);
+    len[i] = tre_strlen(regex[i]);
 
-  ret = tre_mregwncomp(preg, nr, regex, wlen, cflags);
-  xfree(wlen);
+  ret = tre_mregwncomp(preg, nr, regex, len, cflags);
+  xfree(len);
   return ret;
 }
 #endif /* TRE_WCHAR */



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