@@ -510,25 +510,31 @@ PyModule_GetDict(PyObject *m)
510
510
}
511
511
512
512
PyObject *
513
- PyModule_GetNameObject (PyObject * m )
513
+ PyModule_GetNameObject (PyObject * mod )
514
514
{
515
- PyObject * d ;
516
- PyObject * name ;
517
- if (!PyModule_Check (m )) {
515
+ if (!PyModule_Check (mod )) {
518
516
PyErr_BadArgument ();
519
517
return NULL ;
520
518
}
521
- d = ((PyModuleObject * )m )-> md_dict ;
522
- if (d == NULL || !PyDict_Check (d ) ||
523
- (name = PyDict_GetItemWithError (d , & _Py_ID (__name__ ))) == NULL ||
524
- !PyUnicode_Check (name ))
525
- {
526
- if (!PyErr_Occurred ()) {
527
- PyErr_SetString (PyExc_SystemError , "nameless module" );
528
- }
529
- return NULL ;
519
+ PyObject * dict = ((PyModuleObject * )mod )-> md_dict ; // borrowed reference
520
+ if (dict == NULL || !PyDict_Check (dict )) {
521
+ goto error ;
522
+ }
523
+ PyObject * name ;
524
+ if (PyDict_GetItemRef (dict , & _Py_ID (__name__ ), & name ) <= 0 ) {
525
+ goto error ;
526
+ }
527
+ if (!PyUnicode_Check (name )) {
528
+ Py_DECREF (name );
529
+ goto error ;
530
+ }
531
+ return name ;
532
+
533
+ error :
534
+ if (!PyErr_Occurred ()) {
535
+ PyErr_SetString (PyExc_SystemError , "nameless module" );
530
536
}
531
- return Py_NewRef ( name ) ;
537
+ return NULL ;
532
538
}
533
539
534
540
const char *
@@ -544,25 +550,31 @@ PyModule_GetName(PyObject *m)
544
550
}
545
551
546
552
PyObject *
547
- PyModule_GetFilenameObject (PyObject * m )
553
+ PyModule_GetFilenameObject (PyObject * mod )
548
554
{
549
- PyObject * d ;
550
- PyObject * fileobj ;
551
- if (!PyModule_Check (m )) {
555
+ if (!PyModule_Check (mod )) {
552
556
PyErr_BadArgument ();
553
557
return NULL ;
554
558
}
555
- d = ((PyModuleObject * )m )-> md_dict ;
556
- if (d == NULL ||
557
- (fileobj = PyDict_GetItemWithError (d , & _Py_ID (__file__ ))) == NULL ||
558
- !PyUnicode_Check (fileobj ))
559
- {
560
- if (!PyErr_Occurred ()) {
561
- PyErr_SetString (PyExc_SystemError , "module filename missing" );
562
- }
563
- return NULL ;
559
+ PyObject * dict = ((PyModuleObject * )mod )-> md_dict ; // borrowed reference
560
+ if (dict == NULL ) {
561
+ goto error ;
564
562
}
565
- return Py_NewRef (fileobj );
563
+ PyObject * fileobj ;
564
+ if (PyDict_GetItemRef (dict , & _Py_ID (__file__ ), & fileobj ) <= 0 ) {
565
+ goto error ;
566
+ }
567
+ if (!PyUnicode_Check (fileobj )) {
568
+ Py_DECREF (fileobj );
569
+ goto error ;
570
+ }
571
+ return fileobj ;
572
+
573
+ error :
574
+ if (!PyErr_Occurred ()) {
575
+ PyErr_SetString (PyExc_SystemError , "module filename missing" );
576
+ }
577
+ return NULL ;
566
578
}
567
579
568
580
const char *
0 commit comments