chiark / gitweb /
regress: Do not provide our own malloc in fuzz mode
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 23 Nov 2016 16:44:44 +0000 (16:44 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Jun 2020 15:13:02 +0000 (16:13 +0100)
We expect our fuzzer to have a stunt malloc.  So just provide stubs.

This involves moving our malloc wrapper to nonfuzz.c.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
regress/harness.h.m4
regress/hcommon.c.m4
regress/hfuzz.c
regress/hnonfuzz.c

index 0597b6bb3e6d742233e4481ab31e6d84bde79d97..a28c503caf219cc070dafb122b39e431f24ad1ab 100644 (file)
@@ -73,6 +73,7 @@ extern const struct Terrno { const char *n; int v; } Terrnos[];
 void Texit(int rv) NONRETURNING;
 
 void Tcommonshutdown(void);
+void Tmallocshutdown(void);
 int Ttestinputfd(void);
 
 #endif
index 4b80207b520352ebe24708f664e450c48ed40c7e..fddaf0cce8b866397827fdd5ffde09c5ac369d32 100644 (file)
@@ -250,82 +250,6 @@ void Toutputerr(void) {
   Tfailed("write error on test harness output");
 }
 
-struct malloced {
-  struct malloced *next, *back;
-  size_t sz;
-  unsigned long count;
-  struct { double d; long ul; void *p; void (*fp)(void); } data;
-};
-
-static unsigned long malloccount, mallocfailat;
-static struct { struct malloced *head, *tail; } mallocedlist;
-
-#define MALLOCHSZ ((char*)&mallocedlist.head->data - (char*)mallocedlist.head)
-
-void *Hmalloc(size_t sz) {
-  struct malloced *newnode;
-  const char *mfavar;
-  char *ep;
-
-  assert(sz);
-
-  newnode= malloc(MALLOCHSZ + sz);  if (!newnode) Tnomem();
-
-  LIST_LINK_TAIL(mallocedlist,newnode);
-  newnode->sz= sz;
-  newnode->count= ++malloccount;
-  if (!mallocfailat) {
-    mfavar= getenv("ADNS_REGRESS_MALLOCFAILAT");
-    if (mfavar) {
-      mallocfailat= strtoul(mfavar,&ep,10);
-      if (!mallocfailat || *ep) Tfailed("ADNS_REGRESS_MALLOCFAILAT bad value");
-    } else {
-      mallocfailat= ~0UL;
-    }
-  }
-  assert(newnode->count != mallocfailat);
-  memset(&newnode->data,0xc7,sz);
-  return &newnode->data;
-}
-
-void Hfree(void *ptr) {
-  struct malloced *oldnode;
-
-  if (!ptr) return;
-
-  oldnode= (void*)((char*)ptr - MALLOCHSZ);
-  LIST_UNLINK(mallocedlist,oldnode);
-  memset(&oldnode->data,0x38,oldnode->sz);
-  free(oldnode);
-}
-
-void *Hrealloc(void *op, size_t nsz) {
-  struct malloced *oldnode;
-  void *np;
-  size_t osz;
-
-  if (op) { oldnode= (void*)((char*)op - MALLOCHSZ); osz= oldnode->sz; } else { osz= 0; }
-  np= Hmalloc(nsz);
-  if (osz) memcpy(np,op, osz>nsz ? nsz : osz);
-  Hfree(op);
-  return np;
-}
-
-void Tcommonshutdown(void) {
-  struct malloced *loopnode;
-
-  Tshutdown();
-  adns__vbuf_free(&vb);
-  adns__vbuf_free(&vbw);
-  if (mallocedlist.head) {
-    fprintf(stderr,"adns test harness: memory leaked:");
-    for (loopnode=mallocedlist.head; loopnode; loopnode=loopnode->next)
-      fprintf(stderr," %lu",loopnode->count);
-    putc('\n',stderr);
-    if (ferror(stderr)) exit(-1);
-  }
-}
-
 void Hexit(int rv) {
   vb.used= 0;
   Tvbf("exit %d", rv);
@@ -337,3 +261,9 @@ pid_t Hgetpid(void) {
   return 2264; /* just some number */
 }
 
+void Tcommonshutdown(void) {
+  Tshutdown();
+  adns__vbuf_free(&vb);
+  adns__vbuf_free(&vbw);
+  Tmallocshutdown();
+}
index da3865c40faa2e9332f284bbf759069ca97580cf..e09089f6308aac982ceb2f15379cc3441849517a 100644 (file)
@@ -126,3 +126,8 @@ int main(int argc, char **argv) {
   int estatus = Hmain(t_argc, t_argv);
   Texit(estatus);
 }
+
+void Tmallocshutdown(void) { }
+void *Hmalloc(size_t s) { assert(s); return malloc(s); }
+void *Hrealloc(void *p, size_t s) { assert(s); return realloc(p,s); }
+void Hfree(void *p) { free(p); }
index 70cc83d80f629b5728b2a74b71d1ebf7db773101..eff569ee4953ae70affa37bfcb3ae8cc712bf58e 100644 (file)
@@ -42,3 +42,75 @@ int Ttestinputfd(void) {
   if (!fdstr) return -1;
   return atoi(fdstr);
 }
+
+struct malloced {
+  struct malloced *next, *back;
+  size_t sz;
+  unsigned long count;
+  struct { double d; long ul; void *p; void (*fp)(void); } data;
+};
+
+static unsigned long malloccount, mallocfailat;
+static struct { struct malloced *head, *tail; } mallocedlist;
+
+#define MALLOCHSZ ((char*)&mallocedlist.head->data - (char*)mallocedlist.head)
+
+void *Hmalloc(size_t sz) {
+  struct malloced *newnode;
+  const char *mfavar;
+  char *ep;
+
+  assert(sz);
+
+  newnode= malloc(MALLOCHSZ + sz);  if (!newnode) Tnomem();
+
+  LIST_LINK_TAIL(mallocedlist,newnode);
+  newnode->sz= sz;
+  newnode->count= ++malloccount;
+  if (!mallocfailat) {
+    mfavar= getenv("ADNS_REGRESS_MALLOCFAILAT");
+    if (mfavar) {
+      mallocfailat= strtoul(mfavar,&ep,10);
+      if (!mallocfailat || *ep) Tfailed("ADNS_REGRESS_MALLOCFAILAT bad value");
+    } else {
+      mallocfailat= ~0UL;
+    }
+  }
+  assert(newnode->count != mallocfailat);
+  memset(&newnode->data,0xc7,sz);
+  return &newnode->data;
+}
+
+void Hfree(void *ptr) {
+  struct malloced *oldnode;
+
+  if (!ptr) return;
+
+  oldnode= (void*)((char*)ptr - MALLOCHSZ);
+  LIST_UNLINK(mallocedlist,oldnode);
+  memset(&oldnode->data,0x38,oldnode->sz);
+  free(oldnode);
+}
+
+void *Hrealloc(void *op, size_t nsz) {
+  struct malloced *oldnode;
+  void *np;
+  size_t osz;
+
+  if (op) { oldnode= (void*)((char*)op - MALLOCHSZ); osz= oldnode->sz; } else { osz= 0; }
+  np= Hmalloc(nsz);
+  if (osz) memcpy(np,op, osz>nsz ? nsz : osz);
+  Hfree(op);
+  return np;
+}
+
+void Tmallocshutdown(void) {
+  struct malloced *loopnode;
+  if (mallocedlist.head) {
+    fprintf(stderr,"adns test harness: memory leaked:");
+    for (loopnode=mallocedlist.head; loopnode; loopnode=loopnode->next)
+      fprintf(stderr," %lu",loopnode->count);
+    putc('\n',stderr);
+    if (ferror(stderr)) exit(-1);
+  }
+}