From: Huangbin Zhan Date: Tue, 9 Nov 2021 23:05:55 +0800 Subject: [PATCH] hsts.c: fix timestamp reading and writing. Always get zero time on big endian 32bit OS with 64bit time_t such as mips_24kc_musl. --- src/hsts.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) --- a/src/hsts.c +++ b/src/hsts.c @@ -280,7 +280,7 @@ hsts_read_database (hsts_store_t store, char host[256]; int port; - time_t created, max_age; + uintmax_t created, max_age; int include_subdomains; func = (merge_with_existing_entries ? hsts_store_merge : hsts_new_entry); @@ -293,15 +293,15 @@ hsts_read_database (hsts_store_t store, if (*p == '#') continue; - items_read = sscanf (p, "%255s %d %d %lu %lu", + items_read = sscanf (p, "%255s %d %d %"SCNuMAX" %"SCNuMAX, host, &port, &include_subdomains, - (unsigned long *) &created, - (unsigned long *) &max_age); + &created, + &max_age); if (items_read == 5) - func (store, host, port, created, max_age, !!include_subdomains); + func (store, host, port, (time_t) created, (time_t) max_age, !!include_subdomains); } xfree (line); @@ -326,10 +326,10 @@ hsts_store_dump (hsts_store_t store, FIL struct hsts_kh *kh = (struct hsts_kh *) it.key; struct hsts_kh_info *khi = (struct hsts_kh_info *) it.value; - if (fprintf (fp, "%s\t%d\t%d\t%lu\t%lu\n", + if (fprintf (fp, "%s\t%d\t%d\t%"PRIuMAX"\t%"PRIuMAX"\n", kh->host, kh->explicit_port, khi->include_subdomains, - (unsigned long) khi->created, - (unsigned long) khi->max_age) < 0) + (uintmax_t) khi->created, + (uintmax_t) khi->max_age) < 0) { logprintf (LOG_ALWAYS, "Could not write the HSTS database correctly.\n"); break;