diff options
author | Erlend E. Aasland <erlend.aasland@protonmail.com> | 2023-06-11 10:20:43 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-11 10:20:43 (GMT) |
commit | d4fa52934a282df51cff800eee5caeb94a229547 (patch) | |
tree | 98ee396e10a583ff1fcdbcce8b1496cc3a16b172 /Python | |
parent | c932f7284977ebf813313157c52d716ba225a7ac (diff) | |
download | cpython-d4fa52934a282df51cff800eee5caeb94a229547.zip cpython-d4fa52934a282df51cff800eee5caeb94a229547.tar.gz cpython-d4fa52934a282df51cff800eee5caeb94a229547.tar.bz2 |
gh-105375: Improve error handling in the builtins extension module (#105585)
Diffstat (limited to 'Python')
-rw-r--r-- | Python/bltinmodule.c | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 96a7ddd..68fe315 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2162,17 +2162,29 @@ builtin_input_impl(PyObject *module, PyObject *prompt) /* stdin is a text stream, so it must have an encoding. */ stdin_encoding = PyObject_GetAttr(fin, &_Py_ID(encoding)); + if (stdin_encoding == NULL) { + tty = 0; + goto _readline_errors; + } stdin_errors = PyObject_GetAttr(fin, &_Py_ID(errors)); - if (!stdin_encoding || !stdin_errors || - !PyUnicode_Check(stdin_encoding) || - !PyUnicode_Check(stdin_errors)) { + if (stdin_errors == NULL) { + tty = 0; + goto _readline_errors; + } + if (!PyUnicode_Check(stdin_encoding) || + !PyUnicode_Check(stdin_errors)) + { tty = 0; goto _readline_errors; } stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding); + if (stdin_encoding_str == NULL) { + goto _readline_errors; + } stdin_errors_str = PyUnicode_AsUTF8(stdin_errors); - if (!stdin_encoding_str || !stdin_errors_str) + if (stdin_errors_str == NULL) { goto _readline_errors; + } tmp = PyObject_CallMethodNoArgs(fout, &_Py_ID(flush)); if (tmp == NULL) PyErr_Clear(); @@ -2183,17 +2195,29 @@ builtin_input_impl(PyObject *module, PyObject *prompt) const char *stdout_encoding_str, *stdout_errors_str; PyObject *stringpo; stdout_encoding = PyObject_GetAttr(fout, &_Py_ID(encoding)); + if (stdout_encoding == NULL) { + tty = 0; + goto _readline_errors; + } stdout_errors = PyObject_GetAttr(fout, &_Py_ID(errors)); - if (!stdout_encoding || !stdout_errors || - !PyUnicode_Check(stdout_encoding) || - !PyUnicode_Check(stdout_errors)) { + if (stdout_errors == NULL) { + tty = 0; + goto _readline_errors; + } + if (!PyUnicode_Check(stdout_encoding) || + !PyUnicode_Check(stdout_errors)) + { tty = 0; goto _readline_errors; } stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding); + if (stdout_encoding_str == NULL) { + goto _readline_errors; + } stdout_errors_str = PyUnicode_AsUTF8(stdout_errors); - if (!stdout_encoding_str || !stdout_errors_str) + if (stdout_errors_str == NULL) { goto _readline_errors; + } stringpo = PyObject_Str(prompt); if (stringpo == NULL) goto _readline_errors; |