time: Remove alloca() from getdate
authorJoe Simmons-Talbott <josimmon@redhat.com>
Wed, 3 May 2023 16:40:05 +0000 (12:40 -0400)
committerSiddhesh Poyarekar <siddhesh@sourceware.org>
Fri, 5 May 2023 14:55:48 +0000 (10:55 -0400)
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 <siddhesh@sourceware.org>
time/getdate.c

index c5c8378..1dcbd77 100644 (file)
@@ -26,7 +26,6 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <ctype.h>
-#include <alloca.h>
 
 #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;