Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 40 additions & 28 deletions Objects/moduleobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -510,25 +510,31 @@ PyModule_GetDict(PyObject *m)
}

PyObject*
PyModule_GetNameObject(PyObject *m)
PyModule_GetNameObject(PyObject *mod)
{
PyObject *d;
PyObject *name;
if (!PyModule_Check(m)) {
if (!PyModule_Check(mod)) {
PyErr_BadArgument();
return NULL;
}
d = ((PyModuleObject *)m)->md_dict;
if (d == NULL || !PyDict_Check(d) ||
(name = PyDict_GetItemWithError(d, &_Py_ID(__name__))) == NULL ||
!PyUnicode_Check(name))
{
if (!PyErr_Occurred()) {
PyErr_SetString(PyExc_SystemError, "nameless module");
}
return NULL;
PyObject *dict = ((PyModuleObject *)mod)->md_dict; // borrowed reference
if (dict == NULL || !PyDict_Check(dict)) {
goto error;
}
PyObject *name;
if (PyDict_GetItemRef(dict, &_Py_ID(__name__), &name) <= 0) {
goto error;
}
if (!PyUnicode_Check(name)) {
Py_DECREF(name);
goto error;
}
return name;

error:
if (!PyErr_Occurred()) {
PyErr_SetString(PyExc_SystemError, "nameless module");
}
return Py_NewRef(name);
return NULL;
}

const char *
Expand All @@ -544,25 +550,31 @@ PyModule_GetName(PyObject *m)
}

PyObject*
PyModule_GetFilenameObject(PyObject *m)
PyModule_GetFilenameObject(PyObject *mod)
{
PyObject *d;
PyObject *fileobj;
if (!PyModule_Check(m)) {
if (!PyModule_Check(mod)) {
PyErr_BadArgument();
return NULL;
}
d = ((PyModuleObject *)m)->md_dict;
if (d == NULL ||
(fileobj = PyDict_GetItemWithError(d, &_Py_ID(__file__))) == NULL ||
!PyUnicode_Check(fileobj))
{
if (!PyErr_Occurred()) {
PyErr_SetString(PyExc_SystemError, "module filename missing");
}
return NULL;
PyObject *dict = ((PyModuleObject *)mod)->md_dict; // borrowed reference
if (dict == NULL) {
goto error;
}
return Py_NewRef(fileobj);
PyObject *fileobj;
if (PyDict_GetItemRef(dict, &_Py_ID(__file__), &fileobj) <= 0) {
goto error;
}
if (!PyUnicode_Check(fileobj)) {
Py_DECREF(fileobj);
goto error;
}
return fileobj;

error:
if (!PyErr_Occurred()) {
PyErr_SetString(PyExc_SystemError, "module filename missing");
}
return NULL;
}

const char *
Expand Down