Issue #27352: Correct the validation of the ImportFrom AST node and simplify

the implementation of the IMPORT_NAME opcode.
This commit is contained in:
Serhiy Storchaka 2016-06-27 21:39:12 +03:00
parent 44a98b6bf3
commit fbd1523525
2 changed files with 3 additions and 11 deletions

View File

@ -475,8 +475,8 @@ validate_stmt(stmt_ty stmt)
case Import_kind:
return validate_nonempty_seq(stmt->v.Import.names, "names", "Import");
case ImportFrom_kind:
if (stmt->v.ImportFrom.level < -1) {
PyErr_SetString(PyExc_ValueError, "ImportFrom level less than -1");
if (stmt->v.ImportFrom.level < 0) {
PyErr_SetString(PyExc_ValueError, "Negative ImportFrom level");
return 0;
}
return validate_nonempty_seq(stmt->v.ImportFrom.names, "names", "ImportFrom");

View File

@ -2820,21 +2820,13 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
Py_INCREF(func);
from = POP();
level = TOP();
if (PyLong_AsLong(level) != -1 || PyErr_Occurred())
args = PyTuple_Pack(5,
args = PyTuple_Pack(5,
name,
f->f_globals,
f->f_locals == NULL ?
Py_None : f->f_locals,
from,
level);
else
args = PyTuple_Pack(4,
name,
f->f_globals,
f->f_locals == NULL ?
Py_None : f->f_locals,
from);
Py_DECREF(level);
Py_DECREF(from);
if (args == NULL) {