Fix realloc(p, 0) to act like free(p).
Reported by Yoni Londer.
diff --git a/src/jemalloc.c b/src/jemalloc.c
index 08e5f31..865c623 100644
--- a/src/jemalloc.c
+++ b/src/jemalloc.c
@@ -1124,23 +1124,28 @@
;
if (size == 0) {
- if (config_sysv == false || opt_sysv == false)
- size = 1;
- else {
- if (ptr != NULL) {
- if (config_prof || config_stats)
- old_size = isalloc(ptr);
- if (config_prof && opt_prof) {
- old_ctx = prof_ctx_get(ptr);
- cnt = NULL;
- }
- idalloc(ptr);
- } else if (config_prof && opt_prof) {
- old_ctx = NULL;
+ if (ptr != NULL) {
+ /* realloc(ptr, 0) is equivalent to free(p). */
+ if (config_prof || config_stats)
+ old_size = isalloc(ptr);
+ if (config_prof && opt_prof) {
+ old_ctx = prof_ctx_get(ptr);
cnt = NULL;
}
+ idalloc(ptr);
ret = NULL;
goto RETURN;
+ } else {
+ if (config_sysv == false || opt_sysv == false)
+ size = 1;
+ else {
+ if (config_prof && opt_prof) {
+ old_ctx = NULL;
+ cnt = NULL;
+ }
+ ret = NULL;
+ goto RETURN;
+ }
}
}
@@ -1188,6 +1193,7 @@
errno = ENOMEM;
}
} else {
+ /* realloc(NULL, size) is equivalent to malloc(size). */
if (config_prof && opt_prof)
old_ctx = NULL;
if (malloc_init()) {