@@ -1596,14 +1596,14 @@ initialize_locals(PyThreadState *tstate, PyFunctionObject *func,
15961596 continue ;
15971597 PyObject * varname = PyTuple_GET_ITEM (co -> co_localsplusnames , i );
15981598 if (func -> func_kwdefaults != NULL ) {
1599- PyObject * def = PyDict_GetItemWithError (func -> func_kwdefaults , varname );
1599+ PyObject * def ;
1600+ if (PyDict_GetItemRef (func -> func_kwdefaults , varname , & def ) < 0 ) {
1601+ goto fail_post_args ;
1602+ }
16001603 if (def ) {
1601- localsplus [i ] = Py_NewRef ( def ) ;
1604+ localsplus [i ] = def ;
16021605 continue ;
16031606 }
1604- else if (_PyErr_Occurred (tstate )) {
1605- goto fail_post_args ;
1606- }
16071607 }
16081608 missing ++ ;
16091609 }
@@ -2405,13 +2405,9 @@ PyEval_GetBuiltins(void)
24052405PyObject *
24062406_PyEval_GetBuiltin (PyObject * name )
24072407{
2408- PyThreadState * tstate = _PyThreadState_GET ();
2409- PyObject * attr = PyDict_GetItemWithError (PyEval_GetBuiltins (), name );
2410- if (attr ) {
2411- Py_INCREF (attr );
2412- }
2413- else if (!_PyErr_Occurred (tstate )) {
2414- _PyErr_SetObject (tstate , PyExc_AttributeError , name );
2408+ PyObject * attr ;
2409+ if (PyDict_GetItemRef (PyEval_GetBuiltins (), name , & attr ) == 0 ) {
2410+ PyErr_SetObject (PyExc_AttributeError , name );
24152411 }
24162412 return attr ;
24172413}
@@ -2562,12 +2558,12 @@ static PyObject *
25622558import_name (PyThreadState * tstate , _PyInterpreterFrame * frame ,
25632559 PyObject * name , PyObject * fromlist , PyObject * level )
25642560{
2565- PyObject * import_func = _PyDict_GetItemWithError (frame -> f_builtins ,
2566- & _Py_ID (__import__ ));
2561+ PyObject * import_func ;
2562+ if (PyDict_GetItemRef (frame -> f_builtins , & _Py_ID (__import__ ), & import_func ) < 0 ) {
2563+ return NULL ;
2564+ }
25672565 if (import_func == NULL ) {
2568- if (!_PyErr_Occurred (tstate )) {
2569- _PyErr_SetString (tstate , PyExc_ImportError , "__import__ not found" );
2570- }
2566+ _PyErr_SetString (tstate , PyExc_ImportError , "__import__ not found" );
25712567 return NULL ;
25722568 }
25732569
@@ -2578,6 +2574,7 @@ import_name(PyThreadState *tstate, _PyInterpreterFrame *frame,
25782574
25792575 /* Fast path for not overloaded __import__. */
25802576 if (_PyImport_IsDefaultImportFunc (tstate -> interp , import_func )) {
2577+ Py_DECREF (import_func );
25812578 int ilevel = PyLong_AsInt (level );
25822579 if (ilevel == -1 && _PyErr_Occurred (tstate )) {
25832580 return NULL ;
@@ -2591,7 +2588,6 @@ import_name(PyThreadState *tstate, _PyInterpreterFrame *frame,
25912588 }
25922589
25932590 PyObject * args [5 ] = {name , frame -> f_globals , locals , fromlist , level };
2594- Py_INCREF (import_func );
25952591 PyObject * res = PyObject_Vectorcall (import_func , args , 5 , NULL );
25962592 Py_DECREF (import_func );
25972593 return res ;
0 commit comments