]> git.saurik.com Git - apt.git/commitdiff
imbue datetime parsing with C.UTF-8 locale
authorDavid Kalnischkies <david@kalnischkies.de>
Sat, 25 Jun 2016 07:02:07 +0000 (09:02 +0200)
committerDavid Kalnischkies <david@kalnischkies.de>
Sat, 25 Jun 2016 07:02:07 +0000 (09:02 +0200)
Rewritten in 9febc2b238e1e322dce1f94ecbed46d595893b52 for c++ locales
usage and rewritten again in 1d742e01470bba27715a8191c50adde4b39c2f19 to
avoid a currently present stdlibc++6 bug in the std::get_time
implementation. The later implementation uses still stringstreams for
parsing, but forgot to explicitly reset the locale to something sane
(for parsing english dates that is), so date and especially the parsing
of a number is depending on the locale. Turns out, the French (among
others) format their numbers with space as thousand separator so for
some reason the stdlibc++6 thinks its a good idea to interpret the
entire datetime string as a single number instead of realizing that in
"25 Jun …" the later parts can't reasonably be part of that number even
through there are spaces there…

Workaround is hence: LC_NUMERIC=C.UTF-8

Closes: 828011
apt-pkg/contrib/strutl.cc

index 84fc14bb10bd8aa58b651bf06475558bdcdafc2c..1d9577125de2cbaff636b7e32ec8150bb7be441c 100644 (file)
@@ -934,6 +934,8 @@ bool RFC1123StrToTime(const char* const str,time_t &time)
    signed int year = 0; // yes, Y23K problem – we gonna worry then…
    std::string weekday, month, datespec, timespec, zone;
    std::istringstream ss(str);
+   auto const &posix = std::locale("C.UTF-8");
+   ss.imbue(posix);
    ss >> weekday;
    // we only superficially check weekday, mostly to avoid accepting localized
    // weekdays here and take only its length to decide which datetime format we