mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 03:33:33 +08:00
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 <siddhesh@sourceware.org>
This commit is contained in:
parent
642f1b9b3d
commit
21f0b087ee
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user