Improve robustness of asctime() and asctime_r().
* Return NULL and set EINVAL if the given tm pointer is NULL. This isn't mandated by the POSIX base specs, but it just makes sense.
This commit is contained in:
parent
51bce887cd
commit
ece582547a
@ -8,6 +8,8 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <errno_private.h>
|
||||||
|
|
||||||
#include "PosixLCTimeInfo.h"
|
#include "PosixLCTimeInfo.h"
|
||||||
|
|
||||||
|
|
||||||
@ -30,6 +32,11 @@ print_time(char* buffer, size_t bufferSize, const struct tm* tm)
|
|||||||
extern "C" char*
|
extern "C" char*
|
||||||
asctime(const struct tm* tm)
|
asctime(const struct tm* tm)
|
||||||
{
|
{
|
||||||
|
if (tm == NULL) {
|
||||||
|
__set_errno(EINVAL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static char buffer[26];
|
static char buffer[26];
|
||||||
// That's enough to hold normal dates (i.e. with 4-digit years), for any
|
// That's enough to hold normal dates (i.e. with 4-digit years), for any
|
||||||
// other dates the behaviour of asctime() is undefined according to the
|
// other dates the behaviour of asctime() is undefined according to the
|
||||||
@ -42,6 +49,11 @@ asctime(const struct tm* tm)
|
|||||||
extern "C" char*
|
extern "C" char*
|
||||||
asctime_r(const struct tm* tm, char* buffer)
|
asctime_r(const struct tm* tm, char* buffer)
|
||||||
{
|
{
|
||||||
|
if (tm == NULL) {
|
||||||
|
__set_errno(EINVAL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return print_time(buffer, 26, tm);
|
return print_time(buffer, 26, tm);
|
||||||
// 26 bytes seems to be required by the standard, so we can't write more
|
// 26 bytes seems to be required by the standard, so we can't write more
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user