storage/plugins/CurlStorage: don't use glibc extension in

ParseTimePoint.

%Z is a glibc extension to strptime, and is a no-op there, due to the
mapping between timezone names and their definition (especially when the
name comes from a different machine) being ambiguous / impossible.  Time
in HTTP headers is guaranteed to be UTC.

Passing an unknown format to strptime() implementations that don't
support it will generally cause them to return NULL, which will lead to
ParseTimePoint throwing an exception and ParseTimeStamp using an
unnecessary fallback.

Since the timezone name goes at the end of the string, we don't need to
use %Z to skip it (could be an issue in a different time stamp format),
so simply removing %Z works best.
This commit is contained in:
Érico Rolim 2021-02-25 14:21:36 -03:00 committed by Max Kellermann
parent 00a520a4c3
commit c95e3dc065
2 changed files with 3 additions and 1 deletions

2
NEWS
View File

@ -1,6 +1,8 @@
ver 0.22.7 (not yet released)
* decoder
- ffmpeg: fix build problem with FFmpeg 3.4
* storage
- curl: don't use glibc extension
ver 0.22.6 (2021/02/16)
* fix missing tags on songs in queue

View File

@ -193,7 +193,7 @@ ParseTimeStamp(const char *s)
{
try {
// TODO: make this more robust
return ParseTimePoint(s, "%a, %d %b %Y %T %Z");
return ParseTimePoint(s, "%a, %d %b %Y %T");
} catch (...) {
return std::chrono::system_clock::time_point::min();
}