-
-
Notifications
You must be signed in to change notification settings - Fork 32.1k
bpo-22005: Fixed unpickling instances of datetime classes pickled by Python 2. #794
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
bpo-22005: Fixed unpickling instances of datetime classes pickled by Python 2. #794
Conversation
…Python 2. errors='surrogateescape' should be used for successful decoding.
@serhiy-storchaka, thanks for your PR! By analyzing the history of the files in this pull request, we identified @abalkin, @tim-one and @birkenfeld to be potential reviewers. |
Lib/datetime.py
Outdated
1 <= year[2] <= 12: | ||
if (month is None and | ||
isinstance(year, (bytes, str)) and len(year) == 4 and | ||
1 <= ord(year[2:3])&0xFF <= 12): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't understand how the last condition works. Is it supposed to allow str year with year[2] outside of 8-bit range?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If the third byte is in the range 0x00-0x7f, it is decoded to the character in the range U+0000-U+007f. If it is in the range 0x80-0xff, it is decoded to the character in the range U+dc80-U+dcff.
Hmm, but in the latter case ord(year[2:3])&0xFF >= 0x80
, and that condition is false. &0xFF
is not needed in this case. But '&0x7F' in other two cases are needed.
Tests on Travis CI are failed for unrelated cause. |
The Travis CI build is failed due to some glitches. For a copy of this PR #11017 all tests are passed. |
errors='surrogateescape' should be used for successful decoding.encoding='latin1' should be used for successful decoding.
https://bugs.python.org/issue22005