about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJim Meyering <meyering@redhat.com>2010-12-27 18:19:56 -0500
committerUlrich Drepper <drepper@gmail.com>2010-12-27 18:19:56 -0500
commit2543fef229599e8a6e4feeea65ca2dd3f984154f (patch)
treeac2ed911516c1c54273899a23af4fd6b2e941b8f
parentdb014c12695388b4e6eb608a4132a8c7b4ee74f1 (diff)
downloadglibc-2543fef229599e8a6e4feeea65ca2dd3f984154f.tar.gz
glibc-2543fef229599e8a6e4feeea65ca2dd3f984154f.tar.xz
glibc-2543fef229599e8a6e4feeea65ca2dd3f984154f.zip
Fix infloop on persistent failing calloc in regex.
-rw-r--r--ChangeLog6
-rw-r--r--NEWS4
-rw-r--r--posix/regexec.c2
3 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index e86929eb31..31b8a736dc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-12-27  Jim Meyering  <meyering@redhat.com>
+
+	[BZ #12348]
+	* posix/regexec.c (build_trtable): Return failure indication upon
+	calloc failure.  Otherwise, re_search_internal could infloop on OOM.
+
 2010-12-25  Ulrich Drepper  <drepper@gmail.com>
 
 	[BZ #12201]
diff --git a/NEWS b/NEWS
index 5070596163..3edaf547da 100644
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes.  2010-12-26
+GNU C Library NEWS -- history of user-visible changes.  2010-12-27
 Copyright (C) 1992-2009, 2010 Free Software Foundation, Inc.
 See the end for copying conditions.
 
@@ -12,7 +12,7 @@ Version 2.13
   3268, 7066, 10085, 10851, 11149, 11611, 11640, 11655, 11701, 11840, 11856,
   11883, 11903, 11904, 11968, 11979, 12005, 12037, 12067, 12077, 12078, 12092,
   12093, 12107, 12108, 12113, 12140, 12159, 12167, 12191, 12194, 12201, 12204,
-  12205, 12207
+  12205, 12207, 12348
 
 * New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark
 
diff --git a/posix/regexec.c b/posix/regexec.c
index 7f7ae3123f..8d4475cdb9 100644
--- a/posix/regexec.c
+++ b/posix/regexec.c
@@ -3373,6 +3373,8 @@ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state)
 	{
 	  state->trtable = (re_dfastate_t **)
 	    calloc (sizeof (re_dfastate_t *), SBC_MAX);
+	  if (BE (state->trtable == NULL, 0))
+	    return 0;
 	  return 1;
 	}
       return 0;