https://github.com/python/cpython/commit/89a154a0c0f6b8844e1fe7fd761f75ead13608bd
commit: 89a154a0c0f6b8844e1fe7fd761f75ead13608bd
branch: main
author: Okiemute Enato <[email protected]>
committer: kumaraditya303 <[email protected]>
date: 2026-03-19T16:20:18+05:30
summary:

gh-146091: Fix NULL check in termios.tcsetwinsize (#146147)

files:
A Misc/NEWS.d/next/Library/2026-03-18-16-58-17.gh-issue-146091.lBbo1L.rst
M Modules/termios.c

diff --git 
a/Misc/NEWS.d/next/Library/2026-03-18-16-58-17.gh-issue-146091.lBbo1L.rst 
b/Misc/NEWS.d/next/Library/2026-03-18-16-58-17.gh-issue-146091.lBbo1L.rst
new file mode 100644
index 00000000000000..2ed3ea8f90e961
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-03-18-16-58-17.gh-issue-146091.lBbo1L.rst
@@ -0,0 +1,3 @@
+Fix a bug in :func:`termios.tcsetwinsize` where passing a sequence that
+raises an exception in ``__getitem__`` would cause a :exc:`SystemError`
+instead of propagating the original exception.
diff --git a/Modules/termios.c b/Modules/termios.c
index b4eb06cf8ae8ac..95b9c920f39c12 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -500,19 +500,24 @@ termios_tcsetwinsize_impl(PyObject *module, int fd, 
PyObject *winsz)
     PyObject *tmp_item;
     long winsz_0, winsz_1;
     tmp_item = PySequence_GetItem(winsz, 0);
+    if (tmp_item == NULL) {
+        return NULL;
+    }
     winsz_0 = PyLong_AsLong(tmp_item);
+    Py_DECREF(tmp_item);
     if (winsz_0 == -1 && PyErr_Occurred()) {
-        Py_XDECREF(tmp_item);
         return NULL;
     }
-    Py_XDECREF(tmp_item);
     tmp_item = PySequence_GetItem(winsz, 1);
+    if (tmp_item == NULL) {
+        return NULL;
+    }
     winsz_1 = PyLong_AsLong(tmp_item);
+    Py_DECREF(tmp_item);
     if (winsz_1 == -1 && PyErr_Occurred()) {
-        Py_XDECREF(tmp_item);
         return NULL;
     }
-    Py_XDECREF(tmp_item);
+
 
     termiosmodulestate *state = PyModule_GetState(module);
 

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to