summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile9
-rw-r--r--test/double-free.c19
-rw-r--r--test/use-after-free.c18
3 files changed, 45 insertions, 1 deletions
diff --git a/Makefile b/Makefile
index accf611..3f7db7f 100644
--- a/Makefile
+++ b/Makefile
@@ -9,7 +9,12 @@ TESTDIR=test
CFLAGS=-I$(INCDIR) -Wall -Wextra -Wpedantic -g
OBJECTS=$(OBJDIR)/mapalloc.o
-TESTS=$(BINDIR)/overflow $(BINDIR)/underflow $(BINDIR)/zero $(BINDIR)/realloc
+TESTS=$(BINDIR)/overflow \
+ $(BINDIR)/underflow \
+ $(BINDIR)/zero \
+ $(BINDIR)/realloc \
+ $(BINDIR)/use-after-free \
+ $(BINDIR)/double-free
all: $(LIBDIR)/libmapalloc.a
@@ -34,6 +39,8 @@ $(BINDIR)/overflow: $(TESTDIR)/overflow.c
$(BINDIR)/underflow: $(TESTDIR)/underflow.c
$(BINDIR)/zero: $(TESTDIR)/zero.c
$(BINDIR)/realloc: $(TESTDIR)/realloc.c
+$(BINDIR)/use-after-free: $(TESTDIR)/use-after-free.c
+$(BINDIR)/double-free: $(TESTDIR)/double-free.c
$(TESTS):
@mkdir -p $(@D)
diff --git a/test/double-free.c b/test/double-free.c
new file mode 100644
index 0000000..73ceff5
--- /dev/null
+++ b/test/double-free.c
@@ -0,0 +1,19 @@
+#define _POSIX_C_SOURCE 200809L
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include "mapalloc.h"
+
+int main(void)
+{
+ const char buf[] = "THIS IS A CONSTANT STRING";
+
+ char *ptr = map_malloc(sizeof(buf));
+ memcpy(ptr, buf, sizeof(buf));
+ printf("%p: %s\n", ptr, ptr);
+
+ map_free(ptr);
+ printf("freed\n");
+ map_free(ptr);
+ printf("freed again\n");
+}
diff --git a/test/use-after-free.c b/test/use-after-free.c
new file mode 100644
index 0000000..4338ed5
--- /dev/null
+++ b/test/use-after-free.c
@@ -0,0 +1,18 @@
+#define _POSIX_C_SOURCE 200809L
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include "mapalloc.h"
+
+int main(void)
+{
+ const char buf[] = "THIS IS A CONSTANT STRING";
+
+ char *ptr = map_malloc(sizeof(buf));
+ memcpy(ptr, buf, sizeof(buf));
+ printf("%p: %s\n", ptr, ptr);
+
+ map_free(ptr);
+ printf("freed\n");
+ printf("%p: %s\n", ptr, ptr);
+}