From 21f0b087ee10391433d8279e7c6f104fb9ea0eef Mon Sep 17 00:00:00 2001 From: Joe Simmons-Talbott Date: Wed, 3 May 2023 12:40:05 -0400 Subject: [PATCH] time: Remove alloca() from getdate Reduce the usage of alloca() to the bare minimum to avoid the potential for stack overflow. Use __strndup to simplify the code. Reviewed-by: Siddhesh Poyarekar --- time/getdate.c | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/time/getdate.c b/time/getdate.c index c5c8378707..1dcbd77188 100644 --- a/time/getdate.c +++ b/time/getdate.c @@ -26,7 +26,6 @@ #include #include #include -#include #define TM_YEAR_BASE 1900 @@ -153,26 +152,14 @@ __getdate_r (const char *string, struct tm *tp) if (inlen < oldlen) { - bool using_malloc = false; - - if (__libc_use_alloca (inlen + 1)) - instr = alloca (inlen + 1); - else + instr = __strndup(string, inlen); + if (instr == NULL) { - instr = malloc (inlen + 1); - if (instr == NULL) - { - fclose (fp); - return 6; - } - using_malloc = true; + fclose(fp); + return 6; } - memcpy (instr, string, inlen); - instr[inlen] = '\0'; - string = instr; - if (!using_malloc) - instr = NULL; + string = instr; } line = NULL;