Thanks for fixing that bug, which I introduced. I added the attached change to fix the comment (which I also wrote) that led me astray.
>From 59f3fac48e8b5456f4e0a45dfd99fba38d8b7af5 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email protected]>
Date: Thu, 24 Apr 2014 12:49:58 -0700
Subject: [PATCH] dfa: fix incorrect comment that led to heap overrun

* dfa.c (maybe_realloc): Fix comment to match behavior.
---
 src/dfa.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/dfa.c b/src/dfa.c
index 8fc3d6f..f9938b0 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -624,10 +624,14 @@ equal (charclass const s1, charclass const s2)
   return memcmp (s1, s2, sizeof (charclass)) == 0;
 }
 
-/* If needed, reallocate *PTR so that it holds at least NITEMS items.
-   The array holds *NALLOC items; *NALLOC is updated on reallocation.
-   ITEMSIZE is the size of one item.  Avoid O(N**2) behavior on arrays
-   growing linearly.  */
+/* Ensure that the array addressed by PTR holds at least NITEMS +
+   (PTR || !NITEMS) items.  Either return PTR, or reallocate the array
+   and return its new address.  Although PTR may be null, the returned
+   value is never null.
+
+   The array holds *NALLOC items; *NALLOC must be zero if PTR is null,
+   and is updated on reallocation.  ITEMSIZE is the size of one item.
+   Avoid O(N**2) behavior on arrays growing linearly.  */
 static void *
 maybe_realloc (void *ptr, size_t nitems, size_t *nalloc, size_t itemsize)
 {
-- 
1.9.0

Reply via email to