Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250820062122.473540-1-raj.khem@gmail.com>
Date: Tue, 19 Aug 2025 23:21:22 -0700
From: Khem Raj <raj.khem@...il.com>
To: musl@...ts.openwall.com
Cc: nsz@...t70.net,
	Khem Raj <raj.khem@...il.com>
Subject: [PATCH libc-test] Fix strptime on musl

musl parses the digits for %s but does not populate struct tm
(it's "parse-only" and intentionally has no effect on tm).
That's why you get a zeroed-out date like 1900-01-00T00:00:00.
This is current upstream behavior:

case 's': /* Parse only. Effect on tm is unspecified and presently no effect is implemented.. */

musl's strptime only accepts ±hhmm for %z (e.g., -0600).
It does not accept ±hh or ±hh:mm. So '-06' fails by design.
It can be seen that upstream only checks 4 digits after the sign.

Signed-off-by: Khem Raj <raj.khem@...il.com>
---
 AUTHORS                   | 1 +
 src/functional/strptime.c | 4 +++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/AUTHORS b/AUTHORS
index cf2a394..5e78ef7 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -6,3 +6,4 @@ Jens Gustedt
 Alexander Monakov
 Julien Ramseier
 Alyssa Ross
+Khem Raj
diff --git a/src/functional/strptime.c b/src/functional/strptime.c
index b5f8977..f76fa68 100644
--- a/src/functional/strptime.c
+++ b/src/functional/strptime.c
@@ -109,10 +109,12 @@ int main() {
 
 	/* Glibc */
 	checkStrptime("1856-07-10", "%F", &tm4);
+#ifdef __GLIBC__
 	checkStrptime("683078400", "%s", &tm2);
+#endif
 	checkStrptimeTz("+0200", 2, 0);
 	checkStrptimeTz("-0530", -5, -30);
-	checkStrptimeTz("-06", -6, 0);
+	checkStrptimeTz("-0600", -6, 0);
 
 	return t_status;
 }

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.