Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
It's in POSIX-future and some applications have started depending on it. It's easier to backport into musl than fix each individual package. Since we are adding a new interface to libc, update common/shlibs entry as well. This should probably have been done for all musl updates.
- Loading branch information
Showing
3 changed files
with
44 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
From 821083ac7b54eaa040d5a8ddc67c6206a175e0ca Mon Sep 17 00:00:00 2001 | ||
From: Ariadne Conill <ariadne@dereferenced.org> | ||
Date: Sat, 1 Aug 2020 08:26:35 -0600 | ||
Subject: [PATCH] implement reallocarray | ||
|
||
reallocarray is an extension introduced by OpenBSD, which introduces | ||
calloc overflow checking to realloc. | ||
|
||
glibc 2.28 introduced support for this function behind _GNU_SOURCE, | ||
while glibc 2.29 allows its usage in _DEFAULT_SOURCE. | ||
|
||
diff --git a/include/stdlib.h b/include/stdlib.h | ||
index 194c2033..b54a051f 100644 | ||
--- include/stdlib.h | ||
+++ include/stdlib.h | ||
@@ -145,6 +145,7 @@ int getloadavg(double *, int); | ||
int clearenv(void); | ||
#define WCOREDUMP(s) ((s) & 0x80) | ||
#define WIFCONTINUED(s) ((s) == 0xffff) | ||
+void *reallocarray (void *, size_t, size_t); | ||
#endif | ||
|
||
#ifdef _GNU_SOURCE | ||
diff --git a/src/malloc/reallocarray.c b/src/malloc/reallocarray.c | ||
new file mode 100644 | ||
index 00000000..4a6ebe46 | ||
--- /dev/null | ||
+++ src/malloc/reallocarray.c | ||
@@ -0,0 +1,13 @@ | ||
+#define _BSD_SOURCE | ||
+#include <errno.h> | ||
+#include <stdlib.h> | ||
+ | ||
+void *reallocarray(void *ptr, size_t m, size_t n) | ||
+{ | ||
+ if (n && m > -1 / n) { | ||
+ errno = ENOMEM; | ||
+ return 0; | ||
+ } | ||
+ | ||
+ return realloc(ptr, m * n); | ||
+} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters