[Python-checkins] gh-94512: Fix forced arg format in AC-processed msvcrtmodule (GH-94514)

zooba webhook-mailer at python.org
Mon Jul 4 09:09:46 EDT 2022


https://github.com/python/cpython/commit/21f6b4d7838fa16341faf735456b05f8ede9e4f9
commit: 21f6b4d7838fa16341faf735456b05f8ede9e4f9
branch: main
author: Oleg Iarygin <oleg at arhadthedev.net>
committer: zooba <steve.dower at microsoft.com>
date: 2022-07-04T14:09:34+01:00
summary:

gh-94512: Fix forced arg format in AC-processed msvcrtmodule (GH-94514)

files:
M PC/clinic/msvcrtmodule.c.h
M PC/msvcrtmodule.c

diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h
index ea95897590fe4..e60fbd0b623cd 100644
--- a/PC/clinic/msvcrtmodule.c.h
+++ b/PC/clinic/msvcrtmodule.c.h
@@ -141,8 +141,15 @@ msvcrt_open_osfhandle(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
     int flags;
     long _return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, ""_Py_PARSE_UINTPTR"i:open_osfhandle",
-        &handle, &flags)) {
+    if (!_PyArg_CheckPositional("open_osfhandle", nargs, 2, 2)) {
+        goto exit;
+    }
+    handle = PyLong_AsVoidPtr(args[0]);
+    if (!handle && PyErr_Occurred()) {
+        goto exit;
+    }
+    flags = _PyLong_AsInt(args[1]);
+    if (flags == -1 && PyErr_Occurred()) {
         goto exit;
     }
     _return_value = msvcrt_open_osfhandle_impl(module, handle, flags);
@@ -488,8 +495,15 @@ msvcrt_CrtSetReportFile(PyObject *module, PyObject *const *args, Py_ssize_t narg
     void *file;
     void *_return_value;
 
-    if (!_PyArg_ParseStack(args, nargs, "i"_Py_PARSE_UINTPTR":CrtSetReportFile",
-        &type, &file)) {
+    if (!_PyArg_CheckPositional("CrtSetReportFile", nargs, 2, 2)) {
+        goto exit;
+    }
+    type = _PyLong_AsInt(args[0]);
+    if (type == -1 && PyErr_Occurred()) {
+        goto exit;
+    }
+    file = PyLong_AsVoidPtr(args[1]);
+    if (!file && PyErr_Occurred()) {
         goto exit;
     }
     _return_value = msvcrt_CrtSetReportFile_impl(module, type, file);
@@ -647,4 +661,4 @@ msvcrt_SetErrorMode(PyObject *module, PyObject *arg)
 #ifndef MSVCRT_SET_ERROR_MODE_METHODDEF
     #define MSVCRT_SET_ERROR_MODE_METHODDEF
 #endif /* !defined(MSVCRT_SET_ERROR_MODE_METHODDEF) */
-/*[clinic end generated code: output=b543933cad520f2b input=a9049054013a1b77]*/
+/*[clinic end generated code: output=9d89e9414484d28c input=a9049054013a1b77]*/
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c
index 1f78d99c790ff..988d9c95aaa22 100644
--- a/PC/msvcrtmodule.c
+++ b/PC/msvcrtmodule.c
@@ -38,6 +38,14 @@ class HANDLE_converter(CConverter):
     type = 'void *'
     format_unit = '"_Py_PARSE_UINTPTR"'
 
+    def parse_arg(self, argname, displayname):
+        return """
+            {paramname} = PyLong_AsVoidPtr({argname});
+            if (!{paramname} && PyErr_Occurred()) {{{{
+                goto exit;
+            }}}}
+            """.format(argname=argname, paramname=self.parser_name)
+
 class HANDLE_return_converter(CReturnConverter):
     type = 'void *'
 
@@ -66,7 +74,7 @@ class wchar_t_return_converter(CReturnConverter):
         data.return_conversion.append(
             'return_value = PyUnicode_FromOrdinal(_return_value);\n')
 [python start generated code]*/
-/*[python end generated code: output=da39a3ee5e6b4b0d input=d102511df3cda2eb]*/
+/*[python end generated code: output=da39a3ee5e6b4b0d input=1e8e9fa3538ec08f]*/
 
 /*[clinic input]
 module msvcrt



More information about the Python-checkins mailing list