summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2019-01-15 03:45:57 -0800
committerGitHub <noreply@github.com>2019-01-15 03:45:57 -0800
commit97d6a56d9d169f35cf2a24d62bf15adfc42fc672 (patch)
tree5063c550f23e518407ce856e22a281943670713e /Python
parent0bb6b891154b5718c2d7604fc4aa7a51a2f9fe70 (diff)
downloadcpython-git-97d6a56d9d169f35cf2a24d62bf15adfc42fc672.tar.gz
bpo-35742: Fix test_envar_unimportable in test_builtin. (GH-11561)
Handle the case of an empty module name in PYTHONBREAKPOINT. Fixes a regression introduced in bpo-34756. (cherry picked from commit 3607ef43c4a1a24d44f39ff54a77fc0af5bfa09a) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Diffstat (limited to 'Python')
-rw-r--r--Python/sysmodule.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 75e4f4bf29..cdc2edf038 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -134,11 +134,14 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
modulepath = PyUnicode_FromString("builtins");
attrname = envar;
}
- else {
+ else if (last_dot != envar) {
/* Split on the last dot; */
modulepath = PyUnicode_FromStringAndSize(envar, last_dot - envar);
attrname = last_dot + 1;
}
+ else {
+ goto warn;
+ }
if (modulepath == NULL) {
PyMem_RawFree(envar);
return NULL;
@@ -156,27 +159,29 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
Py_DECREF(fromlist);
if (module == NULL) {
- goto error;
+ if (PyErr_ExceptionMatches(PyExc_ImportError)) {
+ goto warn;
+ }
+ PyMem_RawFree(envar);
+ return NULL;
}
PyObject *hook = PyObject_GetAttrString(module, attrname);
Py_DECREF(module);
if (hook == NULL) {
- goto error;
+ if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ goto warn;
+ }
+ PyMem_RawFree(envar);
+ return NULL;
}
PyMem_RawFree(envar);
PyObject *retval = _PyObject_FastCallKeywords(hook, args, nargs, keywords);
Py_DECREF(hook);
return retval;
- error:
- if (!PyErr_ExceptionMatches(PyExc_ImportError)
- && !PyErr_ExceptionMatches(PyExc_AttributeError))
- {
- PyMem_RawFree(envar);
- return NULL;
- }
+ warn:
/* If any of the imports went wrong, then warn and ignore. */
PyErr_Clear();
int status = PyErr_WarnFormat(