summaryrefslogtreecommitdiffstats
path: root/PC
diff options
context:
space:
mode:
authorOleg Iarygin <oleg@arhadthedev.net>2022-07-04 13:09:34 (GMT)
committerGitHub <noreply@github.com>2022-07-04 13:09:34 (GMT)
commit21f6b4d7838fa16341faf735456b05f8ede9e4f9 (patch)
tree5e1eca3250b7ce4cc3b40339afa2ac97348160e4 /PC
parenta391b74dbed085e4c8b922c79dcf7a9d9e72d3df (diff)
downloadcpython-21f6b4d7838fa16341faf735456b05f8ede9e4f9.zip
cpython-21f6b4d7838fa16341faf735456b05f8ede9e4f9.tar.gz
cpython-21f6b4d7838fa16341faf735456b05f8ede9e4f9.tar.bz2
gh-94512: Fix forced arg format in AC-processed msvcrtmodule (GH-94514)
Diffstat (limited to 'PC')
-rw-r--r--PC/clinic/msvcrtmodule.c.h24
-rw-r--r--PC/msvcrtmodule.c10
2 files changed, 28 insertions, 6 deletions
diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h
index ea95897..e60fbd0 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 @@ exit:
#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 1f78d99..988d9c9 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