libhmd-c

C human-readable date string library
git clone https://git.sinitax.com/sinitax/libhmd-c
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

commit 7ef28642466f51bf065e3988966a184ceb88fef4
parent 3433153426fe443a551a4bd1104959058e111858
Author: Louis Burda <quent.burda@gmail.com>
Date:   Mon, 12 Jun 2023 20:25:51 +0200

Make parsing more robust against mishaps

Diffstat:
Msrc/hmd.c | 8++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/hmd.c b/src/hmd.c @@ -248,12 +248,12 @@ hmd_date_parse_daydate_iso8601(struct hmd_date *date, char *arg) enum hmd_err err; uint64_t next; time_t now; - char end; + int n; now = time(NULL); nowtm = *localtime(&now); - if (sscanf(arg, "%u-%u-%u%c", &year, &month, &day, &end) == 3) { + if (sscanf(arg, "%u-%u-%u%n", &year, &month, &day, &n) == 3 && !arg[n]) { tm = startofday(nowtm); tm.tm_year = year - 1900; tm.tm_mon = month - 1; @@ -261,7 +261,7 @@ hmd_date_parse_daydate_iso8601(struct hmd_date *date, char *arg) err = tm2time(&date->ts, tm); if (err) return err; date->spn = HMD_DAY_SPN; - } else if (sscanf(arg, "%u-%u%c", &year, &month, &end) == 2) { + } else if (sscanf(arg, "%u-%u%n", &year, &month, &n) == 2 && !arg[n]) { tm = startofday(nowtm); tm.tm_year = year - 1900; tm.tm_mon = month - 1; @@ -272,7 +272,7 @@ hmd_date_parse_daydate_iso8601(struct hmd_date *date, char *arg) err = tm2time(&next, tm); if (err) return err; date->spn = next - date->ts; - } else if (sscanf(arg, "%u%c", &year, &end) == 1) { + } else if (sscanf(arg, "%uY%n", &year, &n) == 1 && !arg[n]) { tm = startofday(nowtm); tm.tm_year = year - 1900; tm.tm_mon = 0;