Use reallocarray() instead of malloc() or realloc()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
diff --git a/src/fgetwln.c b/src/fgetwln.c
index 2473932..9ee0776 100644
--- a/src/fgetwln.c
+++ b/src/fgetwln.c
@@ -68,7 +68,7 @@ fgetwln(FILE *stream, size_t *lenp)
else
fb->len = FILEWBUF_INIT_LEN;
- wp = realloc(fb->wbuf, fb->len * sizeof(wchar_t));
+ wp = reallocarray(fb->wbuf, fb->len, sizeof(wchar_t));
if (wp == NULL) {
wused = 0;
break;
diff --git a/src/radixsort.c b/src/radixsort.c
index b9746fc..1473925 100644
--- a/src/radixsort.c
+++ b/src/radixsort.c
@@ -118,7 +118,8 @@ sradixsort(const u_char **a, int n, const u_char *tab, u_int endch)
if (n < THRESHOLD)
simplesort(a, n, 0, tr, endch);
else {
- if ((ta = malloc(n * sizeof(a))) == NULL)
+ ta = reallocarray(NULL, n, sizeof(a));
+ if (ta == NULL)
return (-1);
r_sort_b(a, ta, n, 0, tr, endch);
free(ta);
diff --git a/src/setmode.c b/src/setmode.c
index c3c9a8b..cdc2179 100644
--- a/src/setmode.c
+++ b/src/setmode.c
@@ -154,7 +154,7 @@ common: if (set->cmd2 & CMD2_CLR) {
if (set >= endset) { \
BITCMD *newset; \
setlen += SET_LEN_INCR; \
- newset = realloc(saveset, sizeof(BITCMD) * setlen); \
+ newset = reallocarray(saveset, setlen, sizeof(BITCMD)); \
if (newset == NULL) \
goto out; \
set = newset + (set - saveset); \
@@ -197,7 +197,8 @@ setmode(const char *p)
setlen = SET_LEN + 2;
- if ((set = malloc((u_int)(sizeof(BITCMD) * setlen))) == NULL)
+ set = reallocarray(NULL, setlen, sizeof(BITCMD));
+ if (set == NULL)
return (NULL);
saveset = set;
endset = set + (setlen - 2);
diff --git a/src/stringlist.c b/src/stringlist.c
index ce1b2ce..6e5e488 100644
--- a/src/stringlist.c
+++ b/src/stringlist.c
@@ -67,7 +67,7 @@ sl_init(void)
sl->sl_cur = 0;
sl->sl_max = _SL_CHUNKSIZE;
- sl->sl_str = malloc(sl->sl_max * sizeof(char *));
+ sl->sl_str = reallocarray(NULL, sl->sl_max, sizeof(char *));
if (sl->sl_str == NULL) {
free(sl);
sl = NULL;
@@ -88,8 +88,8 @@ sl_add(StringList *sl, char *name)
if (sl->sl_cur == sl->sl_max - 1) {
char **new;
- new = realloc(sl->sl_str,
- (sl->sl_max + _SL_CHUNKSIZE) * sizeof(char *));
+ new = reallocarray(sl->sl_str,
+ (sl->sl_max + _SL_CHUNKSIZE), sizeof(char *));
if (new == NULL)
return -1;
sl->sl_max += _SL_CHUNKSIZE;
diff --git a/test/fgetln.c b/test/fgetln.c
index 83d120c..d3814d8 100644
--- a/test/fgetln.c
+++ b/test/fgetln.c
@@ -149,7 +149,7 @@ test_fgetln_multi(void)
str = strdup("A\n");
str[0] += i;
- files[i].lines = malloc(sizeof(char *) * LINE_COUNT);
+ files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *));
files[i].lines[0] = str;
files[i].lines[1] = str;
files[i].fp = pipe_feed("%s", files[i].lines, LINE_COUNT);
@@ -211,7 +211,7 @@ test_fgetwln_multi(void)
wstr = wcsdup(L"A\n");
wstr[0] += i;
- files[i].lines = malloc(sizeof(char *) * LINE_COUNT);
+ files[i].lines = reallocarray(NULL, LINE_COUNT, sizeof(char *));
files[i].lines[0] = wstr;
files[i].lines[1] = wstr;
files[i].fp = pipe_feed("%ls", files[i].lines, LINE_COUNT);