Description
Bug report
Bug description:
In C, the null byte indicates the end of a char[]
. In INT
and LONG
opcodes for pickle, everything up to a newline is read from the bytestream and ran through a string to integer conversion function. However, a bytestream like b'L1\x00anything\n.'
or b'I1\x00anything\n.'
does not fail in _pickle.c
(like it does in pickle.py
and pickletools.py
) due to the null byte.
On line 5208 (for INT
) and line 5362 (for LONG
), _Unpickler_Readline(state, self, &s)
reads everything (including a null byte) into the s
variable, which is char *
. However, strtol
or PyLong_FromString
(1, 2) stop when the first null byte is encountered, meaning everything including and after the null byte is ignored, returning 1 (in the above example).
It's a small inconsistency as an edge case, but I'm not sure how to fix it, or whether having it stopped at a null byte is desired behavior or not.
Edit - this also applies to FLOAT
.
CPython versions tested on:
3.11
Operating systems tested on:
Linux
Metadata
Metadata
Assignees
Projects
Status