mirror of
https://github.com/python/cpython.git
synced 2025-07-19 17:25:54 +00:00
Issue #8651: PyArg_Parse*() functions raise an OverflowError if the file
doesn't have PY_SSIZE_T_CLEAN define and the size doesn't fit in an int (length bigger than 2^31-1 bytes).
This commit is contained in:
parent
e788ace5ab
commit
451385d8f8
3 changed files with 33 additions and 1 deletions
|
@ -613,7 +613,17 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
|
|||
#define FETCH_SIZE int *q=NULL;Py_ssize_t *q2=NULL;\
|
||||
if (flags & FLAG_SIZE_T) q2=va_arg(*p_va, Py_ssize_t*); \
|
||||
else q=va_arg(*p_va, int*);
|
||||
#define STORE_SIZE(s) if (flags & FLAG_SIZE_T) *q2=s; else *q=s;
|
||||
#define STORE_SIZE(s) \
|
||||
if (flags & FLAG_SIZE_T) \
|
||||
*q2=s; \
|
||||
else { \
|
||||
if (INT_MAX < s) { \
|
||||
PyErr_SetString(PyExc_OverflowError, \
|
||||
"size does not fit in an int"); \
|
||||
return converterr("", arg, msgbuf, bufsize); \
|
||||
} \
|
||||
*q=s; \
|
||||
}
|
||||
#define BUFFER_LEN ((flags & FLAG_SIZE_T) ? *q2:*q)
|
||||
|
||||
const char *format = *p_format;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue