mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
gh-136028: Fix parsing month names containing "İ" (U+0130) in strptime() (GH-136029)
Some checks failed
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / Cross build Linux (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / Undefined behavior sanitizer (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
JIT / Interpreter (Debug) (push) Waiting to run
JIT / aarch64-pc-windows-msvc/msvc (Release) (push) Blocked by required conditions
JIT / aarch64-pc-windows-msvc/msvc (Debug) (push) Blocked by required conditions
JIT / i686-pc-windows-msvc/msvc (Release) (push) Blocked by required conditions
JIT / i686-pc-windows-msvc/msvc (Debug) (push) Blocked by required conditions
JIT / aarch64-apple-darwin/clang (Release) (push) Blocked by required conditions
JIT / aarch64-unknown-linux-gnu/gcc (Release) (push) Blocked by required conditions
JIT / aarch64-apple-darwin/clang (Debug) (push) Blocked by required conditions
JIT / aarch64-unknown-linux-gnu/gcc (Debug) (push) Blocked by required conditions
JIT / x86_64-pc-windows-msvc/msvc (Release) (push) Blocked by required conditions
JIT / x86_64-pc-windows-msvc/msvc (Debug) (push) Blocked by required conditions
JIT / x86_64-apple-darwin/clang (Release) (push) Blocked by required conditions
JIT / x86_64-unknown-linux-gnu/gcc (Release) (push) Blocked by required conditions
JIT / x86_64-apple-darwin/clang (Debug) (push) Blocked by required conditions
JIT / x86_64-unknown-linux-gnu/gcc (Debug) (push) Blocked by required conditions
Lint / lint (push) Waiting to run
mypy / Run mypy on Lib/_pyrepl (push) Waiting to run
mypy / Run mypy on Lib/test/libregrtest (push) Waiting to run
mypy / Run mypy on Lib/tomllib (push) Waiting to run
mypy / Run mypy on Tools/build (push) Waiting to run
mypy / Run mypy on Tools/cases_generator (push) Waiting to run
mypy / Run mypy on Tools/clinic (push) Waiting to run
mypy / Run mypy on Tools/jit (push) Waiting to run
mypy / Run mypy on Tools/peg_generator (push) Waiting to run
Tail calling interpreter / aarch64-apple-darwin/clang (push) Has been cancelled
Tail calling interpreter / aarch64-unknown-linux-gnu/gcc (push) Has been cancelled
Tail calling interpreter / x86_64-pc-windows-msvc/msvc (push) Has been cancelled
Tail calling interpreter / x86_64-apple-darwin/clang (push) Has been cancelled
Tail calling interpreter / x86_64-unknown-linux-gnu/gcc (push) Has been cancelled
Tail calling interpreter / free-threading (push) Has been cancelled
Some checks failed
Tests / (push) Blocked by required conditions
Tests / Windows MSI (push) Blocked by required conditions
Tests / Change detection (push) Waiting to run
Tests / Docs (push) Blocked by required conditions
Tests / Check if Autoconf files are up to date (push) Blocked by required conditions
Tests / Check if generated files are up to date (push) Blocked by required conditions
Tests / Ubuntu SSL tests with OpenSSL (push) Blocked by required conditions
Tests / Cross build Linux (push) Blocked by required conditions
Tests / WASI (push) Blocked by required conditions
Tests / Hypothesis tests on Ubuntu (push) Blocked by required conditions
Tests / Address sanitizer (push) Blocked by required conditions
Tests / Undefined behavior sanitizer (push) Blocked by required conditions
Tests / CIFuzz (push) Blocked by required conditions
Tests / All required checks pass (push) Blocked by required conditions
JIT / Interpreter (Debug) (push) Waiting to run
JIT / aarch64-pc-windows-msvc/msvc (Release) (push) Blocked by required conditions
JIT / aarch64-pc-windows-msvc/msvc (Debug) (push) Blocked by required conditions
JIT / i686-pc-windows-msvc/msvc (Release) (push) Blocked by required conditions
JIT / i686-pc-windows-msvc/msvc (Debug) (push) Blocked by required conditions
JIT / aarch64-apple-darwin/clang (Release) (push) Blocked by required conditions
JIT / aarch64-unknown-linux-gnu/gcc (Release) (push) Blocked by required conditions
JIT / aarch64-apple-darwin/clang (Debug) (push) Blocked by required conditions
JIT / aarch64-unknown-linux-gnu/gcc (Debug) (push) Blocked by required conditions
JIT / x86_64-pc-windows-msvc/msvc (Release) (push) Blocked by required conditions
JIT / x86_64-pc-windows-msvc/msvc (Debug) (push) Blocked by required conditions
JIT / x86_64-apple-darwin/clang (Release) (push) Blocked by required conditions
JIT / x86_64-unknown-linux-gnu/gcc (Release) (push) Blocked by required conditions
JIT / x86_64-apple-darwin/clang (Debug) (push) Blocked by required conditions
JIT / x86_64-unknown-linux-gnu/gcc (Debug) (push) Blocked by required conditions
Lint / lint (push) Waiting to run
mypy / Run mypy on Lib/_pyrepl (push) Waiting to run
mypy / Run mypy on Lib/test/libregrtest (push) Waiting to run
mypy / Run mypy on Lib/tomllib (push) Waiting to run
mypy / Run mypy on Tools/build (push) Waiting to run
mypy / Run mypy on Tools/cases_generator (push) Waiting to run
mypy / Run mypy on Tools/clinic (push) Waiting to run
mypy / Run mypy on Tools/jit (push) Waiting to run
mypy / Run mypy on Tools/peg_generator (push) Waiting to run
Tail calling interpreter / aarch64-apple-darwin/clang (push) Has been cancelled
Tail calling interpreter / aarch64-unknown-linux-gnu/gcc (push) Has been cancelled
Tail calling interpreter / x86_64-pc-windows-msvc/msvc (push) Has been cancelled
Tail calling interpreter / x86_64-apple-darwin/clang (push) Has been cancelled
Tail calling interpreter / x86_64-unknown-linux-gnu/gcc (push) Has been cancelled
Tail calling interpreter / free-threading (push) Has been cancelled
This affects locales az_AZ, ber_DZ, ber_MA and crh_UA.
This commit is contained in:
parent
de0d014815
commit
731f5b8ab3
3 changed files with 22 additions and 2 deletions
|
@ -42,6 +42,14 @@ def _findall(haystack, needle):
|
||||||
yield i
|
yield i
|
||||||
i += len(needle)
|
i += len(needle)
|
||||||
|
|
||||||
|
def _fixmonths(months):
|
||||||
|
yield from months
|
||||||
|
# The lower case of 'İ' ('\u0130') is 'i\u0307'.
|
||||||
|
# The re module only supports 1-to-1 character matching in
|
||||||
|
# case-insensitive mode.
|
||||||
|
for s in months:
|
||||||
|
if 'i\u0307' in s:
|
||||||
|
yield s.replace('i\u0307', '\u0130')
|
||||||
|
|
||||||
lzh_TW_alt_digits = (
|
lzh_TW_alt_digits = (
|
||||||
# 〇:一:二:三:四:五:六:七:八:九
|
# 〇:一:二:三:四:五:六:七:八:九
|
||||||
|
@ -366,8 +374,8 @@ class TimeRE(dict):
|
||||||
'z': r"(?P<z>([+-]\d\d:?[0-5]\d(:?[0-5]\d(\.\d{1,6})?)?)|(?-i:Z))?",
|
'z': r"(?P<z>([+-]\d\d:?[0-5]\d(:?[0-5]\d(\.\d{1,6})?)?)|(?-i:Z))?",
|
||||||
'A': self.__seqToRE(self.locale_time.f_weekday, 'A'),
|
'A': self.__seqToRE(self.locale_time.f_weekday, 'A'),
|
||||||
'a': self.__seqToRE(self.locale_time.a_weekday, 'a'),
|
'a': self.__seqToRE(self.locale_time.a_weekday, 'a'),
|
||||||
'B': self.__seqToRE(self.locale_time.f_month[1:], 'B'),
|
'B': self.__seqToRE(_fixmonths(self.locale_time.f_month[1:]), 'B'),
|
||||||
'b': self.__seqToRE(self.locale_time.a_month[1:], 'b'),
|
'b': self.__seqToRE(_fixmonths(self.locale_time.a_month[1:]), 'b'),
|
||||||
'p': self.__seqToRE(self.locale_time.am_pm, 'p'),
|
'p': self.__seqToRE(self.locale_time.am_pm, 'p'),
|
||||||
'Z': self.__seqToRE((tz for tz_names in self.locale_time.timezone
|
'Z': self.__seqToRE((tz for tz_names in self.locale_time.timezone
|
||||||
for tz in tz_names),
|
for tz in tz_names),
|
||||||
|
|
|
@ -337,6 +337,15 @@ class StrptimeTests(unittest.TestCase):
|
||||||
self.roundtrip('%B', 1, (1900, m, 1, 0, 0, 0, 0, 1, 0))
|
self.roundtrip('%B', 1, (1900, m, 1, 0, 0, 0, 0, 1, 0))
|
||||||
self.roundtrip('%b', 1, (1900, m, 1, 0, 0, 0, 0, 1, 0))
|
self.roundtrip('%b', 1, (1900, m, 1, 0, 0, 0, 0, 1, 0))
|
||||||
|
|
||||||
|
@run_with_locales('LC_TIME', 'az_AZ', 'ber_DZ', 'ber_MA', 'crh_UA')
|
||||||
|
def test_month_locale2(self):
|
||||||
|
# Test for month directives
|
||||||
|
# Month name contains 'İ' ('\u0130')
|
||||||
|
self.roundtrip('%B', 1, (2025, 6, 1, 0, 0, 0, 6, 152, 0))
|
||||||
|
self.roundtrip('%b', 1, (2025, 6, 1, 0, 0, 0, 6, 152, 0))
|
||||||
|
self.roundtrip('%B', 1, (2025, 7, 1, 0, 0, 0, 1, 182, 0))
|
||||||
|
self.roundtrip('%b', 1, (2025, 7, 1, 0, 0, 0, 1, 182, 0))
|
||||||
|
|
||||||
def test_day(self):
|
def test_day(self):
|
||||||
# Test for day directives
|
# Test for day directives
|
||||||
self.roundtrip('%d %Y', 2)
|
self.roundtrip('%d %Y', 2)
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
Fix parsing month names containing "İ" (U+0130, LATIN CAPITAL LETTER I WITH
|
||||||
|
DOT ABOVE) in :func:`time.strptime`. This affects locales az_AZ, ber_DZ,
|
||||||
|
ber_MA and crh_UA.
|
Loading…
Add table
Add a link
Reference in a new issue