mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Issue #15989: Fix several occurrences of integer overflow
when result of PyLong_AsLong() narrowed to int without checks.
This commit is contained in:
parent
5f1cfbb5c0
commit
7898043868
19 changed files with 148 additions and 24 deletions
|
@ -725,7 +725,7 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
|
|||
/* elem must always be a sequence, however simple */
|
||||
PyObject* elem = PySequence_GetItem(tuple, i);
|
||||
int ok = elem != NULL;
|
||||
long type = 0;
|
||||
int type = 0;
|
||||
char *strn = 0;
|
||||
|
||||
if (ok)
|
||||
|
@ -736,8 +736,14 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
|
|||
ok = 0;
|
||||
else {
|
||||
ok = PyLong_Check(temp);
|
||||
if (ok)
|
||||
type = PyLong_AS_LONG(temp);
|
||||
if (ok) {
|
||||
type = _PyLong_AsInt(temp);
|
||||
if (type == -1 && PyErr_Occurred()) {
|
||||
Py_DECREF(temp);
|
||||
Py_DECREF(elem);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
Py_DECREF(temp);
|
||||
}
|
||||
}
|
||||
|
@ -773,8 +779,16 @@ build_node_children(PyObject *tuple, node *root, int *line_num)
|
|||
if (len == 3) {
|
||||
PyObject *o = PySequence_GetItem(elem, 2);
|
||||
if (o != NULL) {
|
||||
if (PyLong_Check(o))
|
||||
*line_num = PyLong_AS_LONG(o);
|
||||
if (PyLong_Check(o)) {
|
||||
int num = _PyLong_AsInt(o);
|
||||
if (num == -1 && PyErr_Occurred()) {
|
||||
Py_DECREF(o);
|
||||
Py_DECREF(temp);
|
||||
Py_DECREF(elem);
|
||||
return 0;
|
||||
}
|
||||
*line_num = num;
|
||||
}
|
||||
else {
|
||||
PyErr_Format(parser_error,
|
||||
"third item in terminal node must be an"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue