summaryrefslogtreecommitdiff
path: root/src/ralloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ralloc.c')
-rw-r--r--src/ralloc.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/ralloc.c b/src/ralloc.c
index 61f7aff95f5..a484cb60cfc 100644
--- a/src/ralloc.c
+++ b/src/ralloc.c
@@ -402,6 +402,11 @@ find_bloc (ptr)
while (p != NIL_BLOC)
{
+ /* Consistency check. Don't return inconsistent blocs.
+ Don't abort here, as callers might be expecting this, but
+ callers that always expect a bloc to be returned should abort
+ if one isn't to avoid a memory corruption bug that is
+ difficult to track down. */
if (p->variable == ptr && p->data == *ptr)
return p;
@@ -981,7 +986,7 @@ r_alloc_free (ptr)
dead_bloc = find_bloc (ptr);
if (dead_bloc == NIL_BLOC)
- abort ();
+ abort (); /* Double free? PTR not originally used to allocate? */
free_bloc (dead_bloc);
*ptr = 0;
@@ -1025,7 +1030,7 @@ r_re_alloc (ptr, size)
bloc = find_bloc (ptr);
if (bloc == NIL_BLOC)
- abort ();
+ abort (); /* Already freed? PTR not originally used to allocate? */
if (size < bloc->size)
{
@@ -1246,7 +1251,7 @@ r_alloc_reset_variable (old, new)
}
if (bloc == NIL_BLOC || bloc->variable != old)
- abort ();
+ abort (); /* Already freed? OLD not originally used to allocate? */
/* Update variable to point to the new location. */
bloc->variable = new;