diff -r 3811995aad73 Modules/_pickle.c --- a/Modules/_pickle.c Wed May 18 15:54:24 2016 -0700 +++ b/Modules/_pickle.c Thu May 19 13:57:29 2016 +0200 @@ -1211,7 +1211,7 @@ static Py_ssize_t Returns -1 (with an exception set) on failure. On success, return the number of chars read. */ static Py_ssize_t -_Unpickler_Read(UnpicklerObject *self, char **s, Py_ssize_t n) +_Unpickler_ReadImpl(UnpicklerObject *self, char **s, Py_ssize_t n) { Py_ssize_t num_read; @@ -1243,6 +1243,14 @@ static Py_ssize_t return n; } +#define _Unpickler_Read(self, s, n) \ + ((self->next_read_idx <= PY_SSIZE_T_MAX - (n) \ + && self->next_read_idx + (n) <= self->input_len) \ + ? (*(s) = self->input_buffer + self->next_read_idx, \ + self->next_read_idx += (n), \ + (n)) \ + : _Unpickler_ReadImpl(self, (s), (n))) + static Py_ssize_t _Unpickler_CopyLine(UnpicklerObject *self, char *line, Py_ssize_t len, char **result)