summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Rühsen <tim.ruehsen@gmx.de>2017-09-19 20:36:22 +0200
committerTim Rühsen <tim.ruehsen@gmx.de>2017-09-19 20:36:22 +0200
commit3029923c2cdb91001c7a4a4714c6926aa656b636 (patch)
treece484d2c056ff0594b2b20495d0eb11ba666acbd
parent041e7bd5edb38399cc416e7a9a165d0ad7865368 (diff)
downloadgnutls-3029923c2cdb91001c7a4a4714c6926aa656b636.tar.gz
parse-datetime: Fix buffer overflow
-rw-r--r--src/gl/parse-datetime.y17
1 files changed, 7 insertions, 10 deletions
diff --git a/src/gl/parse-datetime.y b/src/gl/parse-datetime.y
index 51ba4cc2ce..6b2b878d0b 100644
--- a/src/gl/parse-datetime.y
+++ b/src/gl/parse-datetime.y
@@ -357,14 +357,13 @@ str_days (parser_control *pc, char* /*output*/ buffer, size_t n)
if (pc->debug_ordinal_day_seen)
{
/* use word description of possible (e.g. -1 = last, 3 = third) */
- if (pc->day_ordinal>=-1 && pc->day_ordinal <=12)
+ if (pc->day_ordinal>=-1 && pc->day_ordinal<=12)
{
- strncpy (buffer, ordinal_values[ pc->day_ordinal+1 ], n);
- buffer[n-1]='\0';
+ snprintf (buffer, n, "%s", ordinal_values[pc->day_ordinal + 1]);
}
else
{
- snprintf (buffer,n,"%ld",pc->day_ordinal);
+ snprintf (buffer, n, "%ld", pc->day_ordinal);
}
}
else
@@ -376,12 +375,10 @@ str_days (parser_control *pc, char* /*output*/ buffer, size_t n)
if (pc->day_number>=0 && pc->day_number<=6)
{
size_t l = strlen (buffer);
- if (l>0)
- {
- strncat (buffer," ",n-l);
- ++l;
- }
- strncat (buffer,days_values[pc->day_number],n-l);
+
+ if (l < n)
+ snprintf (buffer + l, n - l, "%s%s",
+ (l ? " " : ""), days_values[pc->day_number]);
}
else
{