BUG/MINOR: http/sample: gmtime/localtime can fail

The man said that gmtime() and localtime() can return a NULL value.
This is not tested. It appears that all the values of a 32 bit integer
are valid, but it is better to check the return of these functions.

However, if the integer move from 32 bits to 64 bits, some 64 values
can be unsupported.
This commit is contained in:
Thierry FOURNIER 2015-07-08 00:15:20 +02:00 committed by Willy Tarreau
parent 8a39a1fcc3
commit fac9ccfb70
2 changed files with 12 additions and 2 deletions

View File

@ -12084,6 +12084,8 @@ static int sample_conv_http_date(const struct arg *args, struct sample *smp, voi
curr_date += args[0].data.sint;
tm = gmtime(&curr_date);
if (!tm)
return 0;
temp = get_trash_chunk();
temp->len = snprintf(temp->str, temp->size - temp->len,

View File

@ -1519,13 +1519,17 @@ static int sample_conv_ltime(const struct arg *args, struct sample *smp, void *p
{
struct chunk *temp;
time_t curr_date = smp->data.uint;
struct tm *tm;
/* add offset */
if (args[1].type == ARGT_SINT || args[1].type == ARGT_UINT)
curr_date += args[1].data.sint;
tm = localtime(&curr_date);
if (!tm)
return 0;
temp = get_trash_chunk();
temp->len = strftime(temp->str, temp->size, args[0].data.str.str, localtime(&curr_date));
temp->len = strftime(temp->str, temp->size, args[0].data.str.str, tm);
smp->data.str = *temp;
smp->type = SMP_T_STR;
return 1;
@ -1549,13 +1553,17 @@ static int sample_conv_utime(const struct arg *args, struct sample *smp, void *p
{
struct chunk *temp;
time_t curr_date = smp->data.uint;
struct tm *tm;
/* add offset */
if (args[1].type == ARGT_SINT || args[1].type == ARGT_UINT)
curr_date += args[1].data.sint;
tm = gmtime(&curr_date);
if (!tm)
return 0;
temp = get_trash_chunk();
temp->len = strftime(temp->str, temp->size, args[0].data.str.str, gmtime(&curr_date));
temp->len = strftime(temp->str, temp->size, args[0].data.str.str, tm);
smp->data.str = *temp;
smp->type = SMP_T_STR;
return 1;