summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2021-01-01 19:40:38 +0200
committerGitHub <noreply@github.com>2021-01-01 19:40:38 +0200
commit187785e2fa2050156a6eda93fb2da31db13f07a6 (patch)
tree67b566f85860d493dc7a0264628fe71a75f7f7f9
parent[3.8] bpo-42425: Fix possible leak in initialization of errmap for OSError (G... (diff)
downloadcpython-187785e2fa2050156a6eda93fb2da31db13f07a6.tar.gz
cpython-187785e2fa2050156a6eda93fb2da31db13f07a6.tar.bz2
cpython-187785e2fa2050156a6eda93fb2da31db13f07a6.zip
[3.8] bpo-36589: Fix the error handling in curses.update_lines_cols(). (GH-12766) (GH-24023)
Return None instead of 1. (cherry picked from commit 2bc343417a4de83fa6998ff91303877734ecd366) Co-authored-by: Zackery Spytz <zspytz@gmail.com>
-rw-r--r--Misc/NEWS.d/next/Library/2019-11-16-22-56-51.bpo-36589.0Io76D.rst2
-rw-r--r--Modules/_cursesmodule.c29
-rw-r--r--Modules/clinic/_cursesmodule.c.h16
3 files changed, 26 insertions, 21 deletions
diff --git a/Misc/NEWS.d/next/Library/2019-11-16-22-56-51.bpo-36589.0Io76D.rst b/Misc/NEWS.d/next/Library/2019-11-16-22-56-51.bpo-36589.0Io76D.rst
new file mode 100644
index 00000000000..3c1221b2034
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-11-16-22-56-51.bpo-36589.0Io76D.rst
@@ -0,0 +1,2 @@
+The :func:`curses.update_lines_cols` function now returns ``None`` instead
+of ``1`` on success.
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index b2b1117fb09..ac23d5d7474 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -3757,15 +3757,18 @@ update_lines_cols(void)
}
/*[clinic input]
-_curses.update_lines_cols -> int
+_curses.update_lines_cols
[clinic start generated code]*/
-static int
+static PyObject *
_curses_update_lines_cols_impl(PyObject *module)
-/*[clinic end generated code: output=0345e7f072ea711a input=3a87760f7d5197f0]*/
+/*[clinic end generated code: output=423f2b1e63ed0f75 input=5f065ab7a28a5d90]*/
{
- return update_lines_cols();
+ if (!update_lines_cols()) {
+ return NULL;
+ }
+ Py_RETURN_NONE;
}
#endif
@@ -3849,8 +3852,10 @@ _curses_resizeterm_impl(PyObject *module, int nlines, int ncols)
result = PyCursesCheckERR(resizeterm(nlines, ncols), "resizeterm");
if (!result)
return NULL;
- if (!update_lines_cols())
+ if (!update_lines_cols()) {
+ Py_DECREF(result);
return NULL;
+ }
return result;
}
@@ -3886,8 +3891,10 @@ _curses_resize_term_impl(PyObject *module, int nlines, int ncols)
result = PyCursesCheckERR(resize_term(nlines, ncols), "resize_term");
if (!result)
return NULL;
- if (!update_lines_cols())
+ if (!update_lines_cols()) {
+ Py_DECREF(result);
return NULL;
+ }
return result;
}
#endif /* HAVE_CURSES_RESIZE_TERM */
@@ -3958,12 +3965,18 @@ _curses_start_color_impl(PyObject *module)
c = PyLong_FromLong((long) COLORS);
if (c == NULL)
return NULL;
- PyDict_SetItemString(ModDict, "COLORS", c);
+ if (PyDict_SetItemString(ModDict, "COLORS", c) < 0) {
+ Py_DECREF(c);
+ return NULL;
+ }
Py_DECREF(c);
cp = PyLong_FromLong((long) COLOR_PAIRS);
if (cp == NULL)
return NULL;
- PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp);
+ if (PyDict_SetItemString(ModDict, "COLOR_PAIRS", cp) < 0) {
+ Py_DECREF(cp);
+ return NULL;
+ }
Py_DECREF(cp);
Py_RETURN_NONE;
} else {
diff --git a/Modules/clinic/_cursesmodule.c.h b/Modules/clinic/_cursesmodule.c.h
index ad93e6a0ca0..437604cb92a 100644
--- a/Modules/clinic/_cursesmodule.c.h
+++ b/Modules/clinic/_cursesmodule.c.h
@@ -3799,23 +3799,13 @@ PyDoc_STRVAR(_curses_update_lines_cols__doc__,
#define _CURSES_UPDATE_LINES_COLS_METHODDEF \
{"update_lines_cols", (PyCFunction)_curses_update_lines_cols, METH_NOARGS, _curses_update_lines_cols__doc__},
-static int
+static PyObject *
_curses_update_lines_cols_impl(PyObject *module);
static PyObject *
_curses_update_lines_cols(PyObject *module, PyObject *Py_UNUSED(ignored))
{
- PyObject *return_value = NULL;
- int _return_value;
-
- _return_value = _curses_update_lines_cols_impl(module);
- if ((_return_value == -1) && PyErr_Occurred()) {
- goto exit;
- }
- return_value = PyLong_FromLong((long)_return_value);
-
-exit:
- return return_value;
+ return _curses_update_lines_cols_impl(module);
}
#endif /* (defined(HAVE_CURSES_RESIZETERM) || defined(HAVE_CURSES_RESIZE_TERM)) */
@@ -4569,4 +4559,4 @@ _curses_use_default_colors(PyObject *module, PyObject *Py_UNUSED(ignored))
#ifndef _CURSES_USE_DEFAULT_COLORS_METHODDEF
#define _CURSES_USE_DEFAULT_COLORS_METHODDEF
#endif /* !defined(_CURSES_USE_DEFAULT_COLORS_METHODDEF) */
-/*[clinic end generated code: output=e5b3502f1d38dff0 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=820af7050893ed16 input=a9049054013a1b77]*/