From: Paul Eggert <eggert@cs.ucla.edu>
Date: Mon, 27 Feb 2012 07:09:05 +0000 (-0800)
Subject: regex: re_search etc. should return -2 when memory exhausted
X-Git-Tag: v0.1~1054
X-Git-Url: https://gitweb.git.savannah.gnu.org/gitweb/?a=commitdiff_plain;h=0e4e5e4e5e3bd26e637571f7c939715e276700c7;p=gnulib.git

regex: re_search etc. should return -2 when memory exhausted

This bug was uncovered when testing 'grep'.  Without the fix,
re_search and friends return -1 when memory is exhausted, but -1
means no match, and this causes grep to falsely report no-match
instead of memory-exhaustion.  See
<http://sources.redhat.com/bugzilla/show_bug.cgi?id=13762>.
* lib/regexec.c (re_search_stub): Return -2 (not -1) if there is
trouble; this can occur if re_search_internal ran out of memory.
---

diff --git a/ChangeLog b/ChangeLog
index ed9c384c1b..433609aab7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2012-02-26  Paul Eggert  <eggert@cs.ucla.edu>
+
+	regex: re_search etc. should return -2 when memory exhausted
+	This bug was uncovered when testing 'grep'.  Without the fix,
+	re_search and friends return -1 when memory is exhausted, but -1
+	means no match, and this causes grep to falsely report no-match
+	instead of memory-exhaustion.  See
+	<http://sources.redhat.com/bugzilla/show_bug.cgi?id=13762>.
+	* lib/regexec.c (re_search_stub): Return -2 (not -1) if there is
+	trouble; this can occur if re_search_internal ran out of memory.
+
 2012-02-26  Bruno Haible  <bruno@clisp.org>
 
 	modfl-ieee: Work around test failures on IRIX, OSF/1, mingw.
diff --git a/lib/regexec.c b/lib/regexec.c
index 660d25b581..5cbfa91270 100644
--- a/lib/regexec.c
+++ b/lib/regexec.c
@@ -475,7 +475,7 @@ re_search_stub (struct re_pattern_buffer *bufp,
 
   /* I hope we needn't fill ther regs with -1's when no match was found.  */
   if (result != REG_NOERROR)
-    rval = -1;
+    rval = result == REG_NOMATCH ? -1 : -2;
   else if (regs != NULL)
     {
       /* If caller wants register contents data back, copy them.  */