]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-45386: Handle strftime's ValueError graciously in xmlrpc.client (GH-28765) (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Wed, 13 Oct 2021 18:00:05 +0000 (11:00 -0700)
committerGitHub <noreply@github.com>
Wed, 13 Oct 2021 18:00:05 +0000 (20:00 +0200)
At import time, the xmlrpc.client module uses different date formats to
test strftime so it can format years with 4 digits consistently.
Depending on the underlying C library and its strftime implementation
some of these calls can result in ValueErrors, blocking the
xmlrpc.client module from being imported.

This commit changes the behavior of this bit of code to react to
ValueError exceptions, treating the format that caused them as an
non-viable option.
(cherry picked from commit 1c831353816ff699b54e804047a7242a09e98f5b)

Co-authored-by: rtobar <rtobarc@gmail.com>
Lib/xmlrpc/client.py
Misc/NEWS.d/next/Library/2021-10-07-00-05-05.bpo-45386.q9ORpA.rst [new file with mode: 0644]

index 9e7449c88dfc0d41a5ccfa299a4f30e7023d31c0..a614cef6ab2f1a52b3ece45f9a3c2e6920802e15 100644 (file)
@@ -264,16 +264,22 @@ boolean = Boolean = bool
 
 # Issue #13305: different format codes across platforms
 _day0 = datetime(1, 1, 1)
-if _day0.strftime('%Y') == '0001':      # Mac OS X
+def _try(fmt):
+    try:
+        return _day0.strftime(fmt) == '0001'
+    except ValueError:
+        return False
+if _try('%Y'):      # Mac OS X
     def _iso8601_format(value):
         return value.strftime("%Y%m%dT%H:%M:%S")
-elif _day0.strftime('%4Y') == '0001':   # Linux
+elif _try('%4Y'):   # Linux
     def _iso8601_format(value):
         return value.strftime("%4Y%m%dT%H:%M:%S")
 else:
     def _iso8601_format(value):
         return value.strftime("%Y%m%dT%H:%M:%S").zfill(17)
 del _day0
+del _try
 
 
 def _strftime(value):
diff --git a/Misc/NEWS.d/next/Library/2021-10-07-00-05-05.bpo-45386.q9ORpA.rst b/Misc/NEWS.d/next/Library/2021-10-07-00-05-05.bpo-45386.q9ORpA.rst
new file mode 100644 (file)
index 0000000..eec77ce
--- /dev/null
@@ -0,0 +1,3 @@
+Make :mod:`xmlrpc.client` more robust to C runtimes where the underlying C
+``strftime`` function results in a ``ValueError`` when testing for year
+formatting options.