hsts: handle unlimited expiry

When setting a blank expire string, meaning unlimited, curl would pass
TIME_T_MAX to getime_r() when creating the output, while on 64 bit
systems such a large value cannot be convetered to a tm struct making
curl to exit the loop with an error instead. It can't be converted
because the year it would represent doesn't fit in the 'int tm_year'
field!

Starting now, unlimited expiry is instead handled differently by using a
human readable expiry date spelled out as "unlimited" instead of trying
to use a distant actual date.

Test 1660 and 1915 have been updated to help verify this change.

Reported-by: Jonathan Cardoso
Fixes #7720
Closes #7721
This commit is contained in:
Daniel Stenberg 2021-09-14 16:20:47 +02:00
parent d5a70e77b2
commit 54f6d836d8
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
4 changed files with 47 additions and 28 deletions

View file

@ -20,6 +20,7 @@ HSTS
# This file was generated by libcurl! Edit at your own risk.
.readfrom.example "20211001 04:47:41"
.old.example "20161001 04:47:41"
.new.example "unlimited"
</file>
# This date is exactly "20190124 22:34:21" UTC
@ -59,7 +60,7 @@ foo.example.com [example.com]: 1569905261 includeSubDomains
'forexample.net' is not HSTS
'example.net' is not HSTS
expire.example [expire.example]: 1548369268
Number of entries: 3
Number of entries: 4
expire.example [expire.example]: 1548369268
expire.example [expire.example]: 1548369268
expire.example [expire.example]: 1548369268
@ -74,6 +75,7 @@ expire.example [expire.example]: 1548369268
<file name="log/hsts%TESTNUMBER" mode="text">
# Your HSTS cache. https://curl.se/docs/hsts.html
# This file was generated by libcurl! Edit at your own risk.
.new.example "unlimited"
.example.com "20191001 04:47:41"
example.org "20200124 22:34:21"
</file>

View file

@ -42,9 +42,9 @@ http://%HOSTIP:%NOLISTENPORT/not-there/%TESTNUMBER
</errorcode>
<stdout>
[0/4] 1.example.com 20370320 01:02:03
[1/4] 2.example.com 20370320 01:02:03
[2/4] 3.example.com 20370320 01:02:03
[3/4] 4.example.com 20370320 01:02:03
[1/4] 2.example.com 20370320 03:02:01
[2/4] 3.example.com 20370319 01:02:03
[3/4] 4.example.com unlimited
</stdout>
</verify>
</testcase>