diff options
author | Tim Rühsen <tim.ruehsen@gmx.de> | 2017-09-19 20:36:22 +0200 |
---|---|---|
committer | Tim Rühsen <tim.ruehsen@gmx.de> | 2017-09-19 20:36:22 +0200 |
commit | 3029923c2cdb91001c7a4a4714c6926aa656b636 (patch) | |
tree | ce484d2c056ff0594b2b20495d0eb11ba666acbd | |
parent | 041e7bd5edb38399cc416e7a9a165d0ad7865368 (diff) | |
download | gnutls-3029923c2cdb91001c7a4a4714c6926aa656b636.tar.gz |
parse-datetime: Fix buffer overflow
-rw-r--r-- | src/gl/parse-datetime.y | 17 |
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 { |