diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-01-15 03:45:57 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-15 03:45:57 -0800 |
commit | 97d6a56d9d169f35cf2a24d62bf15adfc42fc672 (patch) | |
tree | 5063c550f23e518407ce856e22a281943670713e /Python | |
parent | 0bb6b891154b5718c2d7604fc4aa7a51a2f9fe70 (diff) | |
download | cpython-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.c | 25 |
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( |