https://github.com/python/cpython/commit/23c17f3c1aa9a0da6de0a50586aee9ddd39f48cb
commit: 23c17f3c1aa9a0da6de0a50586aee9ddd39f48cb
branch: 3.11
author: Nikita Sobolev <[email protected]>
committer: sobolevn <[email protected]>
date: 2024-03-06T10:54:34+03:00
summary:
[3.11] gh-116326: Handler errors correctly in `getwindowsversion` in
`sysmodule` (GH-116339) (#116388)
(cherry picked from commit c91bdf86ef1cf9365b61a46aa2e51e5d1932b00a)
files:
M Python/sysmodule.c
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 08d8d5eb10c11f..560a6805fe323d 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1479,15 +1479,24 @@ sys_getwindowsversion_impl(PyObject *module)
if (version == NULL)
return NULL;
- PyStructSequence_SET_ITEM(version, pos++,
PyLong_FromLong(ver.dwMajorVersion));
- PyStructSequence_SET_ITEM(version, pos++,
PyLong_FromLong(ver.dwMinorVersion));
- PyStructSequence_SET_ITEM(version, pos++,
PyLong_FromLong(ver.dwBuildNumber));
- PyStructSequence_SET_ITEM(version, pos++,
PyLong_FromLong(ver.dwPlatformId));
- PyStructSequence_SET_ITEM(version, pos++,
PyUnicode_FromWideChar(ver.szCSDVersion, -1));
- PyStructSequence_SET_ITEM(version, pos++,
PyLong_FromLong(ver.wServicePackMajor));
- PyStructSequence_SET_ITEM(version, pos++,
PyLong_FromLong(ver.wServicePackMinor));
- PyStructSequence_SET_ITEM(version, pos++, PyLong_FromLong(ver.wSuiteMask));
- PyStructSequence_SET_ITEM(version, pos++,
PyLong_FromLong(ver.wProductType));
+#define SET_VERSION_INFO(CALL) \
+ do { \
+ PyObject *item = (CALL); \
+ if (item == NULL) { \
+ goto error; \
+ } \
+ PyStructSequence_SET_ITEM(version, pos++, item); \
+ } while(0)
+
+ SET_VERSION_INFO(PyLong_FromLong(ver.dwMajorVersion));
+ SET_VERSION_INFO(PyLong_FromLong(ver.dwMinorVersion));
+ SET_VERSION_INFO(PyLong_FromLong(ver.dwBuildNumber));
+ SET_VERSION_INFO(PyLong_FromLong(ver.dwPlatformId));
+ SET_VERSION_INFO(PyUnicode_FromWideChar(ver.szCSDVersion, -1));
+ SET_VERSION_INFO(PyLong_FromLong(ver.wServicePackMajor));
+ SET_VERSION_INFO(PyLong_FromLong(ver.wServicePackMinor));
+ SET_VERSION_INFO(PyLong_FromLong(ver.wSuiteMask));
+ SET_VERSION_INFO(PyLong_FromLong(ver.wProductType));
realMajor = ver.dwMajorVersion;
realMinor = ver.dwMinorVersion;
@@ -1514,17 +1523,19 @@ sys_getwindowsversion_impl(PyObject *module)
}
PyMem_RawFree(verblock);
}
- PyStructSequence_SET_ITEM(version, pos++, Py_BuildValue("(kkk)",
+ SET_VERSION_INFO(Py_BuildValue("(kkk)",
realMajor,
realMinor,
realBuild
));
- if (PyErr_Occurred()) {
- Py_DECREF(version);
- return NULL;
- }
+#undef SET_VERSION_INFO
+
return version;
+
+error:
+ Py_DECREF(version);
+ return NULL;
}
#pragma warning(pop)
_______________________________________________
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]