From e25e9ba29b0a08d2006aaf435168147aa9ac35f0 Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Sun, 21 Feb 2021 21:08:21 +0100 Subject: [PATCH] Make the contract of Array & Buffer fail after a clear. --- m-array.h | 7 +++++-- m-buffer.h | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/m-array.h b/m-array.h index fcd0a76d..13a17211 100644 --- a/m-array.h +++ b/m-array.h @@ -133,6 +133,7 @@ M_ASSERT (a != NULL); \ M_ASSERT (a->size <= a->alloc); \ M_ASSERT (a->size == 0 || a->ptr != NULL); \ + M_ASSERT (a->alloc == 0 || a->ptr != NULL); \ } while (0) /* Deferred evaluation for the array definition, @@ -205,7 +206,8 @@ M_ARRA4_CONTRACT(v); \ M_C(name, _clean)(v); \ M_CALL_FREE(oplist, v->ptr); \ - v->alloc = 0; \ + /* This is so reusing the object implies an assertion failure */ \ + v->alloc = 1; \ v->ptr = NULL; \ } \ \ @@ -255,7 +257,8 @@ d->size = s->size; \ d->alloc = s->alloc; \ d->ptr = s->ptr; \ - s->alloc = 0; \ + /* Robustness */ \ + s->alloc = 1; \ s->ptr = NULL; \ M_ARRA4_CONTRACT(d); \ } \ diff --git a/m-buffer.h b/m-buffer.h index 4a6bf00c..cf086447 100644 --- a/m-buffer.h +++ b/m-buffer.h @@ -806,6 +806,7 @@ M_C(name, _init)(buffer_t v, size_t size) \ } \ M_CALL_FREE(oplist, buffer->Tab); \ buffer->Tab = NULL; /* safer */ \ + buffer->size = 3; \ } \ \ static inline size_t \ @@ -1131,6 +1132,7 @@ M_C(name, _init)(buffer_t v, size_t size) \ } \ M_CALL_FREE(oplist, buffer->Tab); \ buffer->Tab = NULL; /* safer */ \ + buffer->size = 3; \ } \ \