summaryrefslogtreecommitdiffstats
path: root/PC/msvcrtmodule.c
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2017-02-04 23:05:40 (GMT)
committerSteve Dower <steve.dower@microsoft.com>2017-02-04 23:05:40 (GMT)
commitbf0fc39edb87c71ec1c4ef8353f8d72bb7bb9d1b (patch)
tree08223c866c3284a8d2be6733eeb69f7a7af3b984 /PC/msvcrtmodule.c
parent1add96f1b669436ca96dc8adf24276adea6aea4c (diff)
parent21fae03e16de9bedc0fd3918ef1ceb7d1c746678 (diff)
downloadcpython-bf0fc39edb87c71ec1c4ef8353f8d72bb7bb9d1b.zip
cpython-bf0fc39edb87c71ec1c4ef8353f8d72bb7bb9d1b.tar.gz
cpython-bf0fc39edb87c71ec1c4ef8353f8d72bb7bb9d1b.tar.bz2
Issue #29392: Prevent crash when passing invalid arguments into msvcrt module.
Diffstat (limited to 'PC/msvcrtmodule.c')
-rw-r--r--PC/msvcrtmodule.c47
1 files changed, 43 insertions, 4 deletions
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c
index c9d1e6c..4797cdc 100644
--- a/PC/msvcrtmodule.c
+++ b/PC/msvcrtmodule.c
@@ -111,7 +111,9 @@ msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes)
int err;
Py_BEGIN_ALLOW_THREADS
+ _Py_BEGIN_SUPPRESS_IPH
err = _locking(fd, mode, nbytes);
+ _Py_END_SUPPRESS_IPH
Py_END_ALLOW_THREADS
if (err != 0)
return PyErr_SetFromErrno(PyExc_IOError);
@@ -138,7 +140,9 @@ static long
msvcrt_setmode_impl(PyObject *module, int fd, int flags)
/*[clinic end generated code: output=24a9be5ea07ccb9b input=76e7c01f6b137f75]*/
{
+ _Py_BEGIN_SUPPRESS_IPH
flags = _setmode(fd, flags);
+ _Py_END_SUPPRESS_IPH
if (flags == -1)
PyErr_SetFromErrno(PyExc_IOError);
@@ -165,7 +169,9 @@ msvcrt_open_osfhandle_impl(PyObject *module, intptr_t handle, int flags)
{
int fd;
+ _Py_BEGIN_SUPPRESS_IPH
fd = _open_osfhandle(handle, flags);
+ _Py_END_SUPPRESS_IPH
if (fd == -1)
PyErr_SetFromErrno(PyExc_IOError);
@@ -303,7 +309,9 @@ static PyObject *
msvcrt_putch_impl(PyObject *module, char char_value)
/*[clinic end generated code: output=92ec9b81012d8f60 input=ec078dd10cb054d6]*/
{
+ _Py_BEGIN_SUPPRESS_IPH
_putch(char_value);
+ _Py_END_SUPPRESS_IPH
Py_RETURN_NONE;
}
@@ -320,7 +328,9 @@ static PyObject *
msvcrt_putwch_impl(PyObject *module, int unicode_char)
/*[clinic end generated code: output=a3bd1a8951d28eee input=996ccd0bbcbac4c3]*/
{
+ _Py_BEGIN_SUPPRESS_IPH
_putwch(unicode_char);
+ _Py_END_SUPPRESS_IPH
Py_RETURN_NONE;
}
@@ -342,7 +352,13 @@ static PyObject *
msvcrt_ungetch_impl(PyObject *module, char char_value)
/*[clinic end generated code: output=c6942a0efa119000 input=22f07ee9001bbf0f]*/
{
- if (_ungetch(char_value) == EOF)
+ int res;
+
+ _Py_BEGIN_SUPPRESS_IPH
+ res = _ungetch(char_value);
+ _Py_END_SUPPRESS_IPH
+
+ if (res == EOF)
return PyErr_SetFromErrno(PyExc_IOError);
Py_RETURN_NONE;
}
@@ -360,7 +376,13 @@ static PyObject *
msvcrt_ungetwch_impl(PyObject *module, int unicode_char)
/*[clinic end generated code: output=e63af05438b8ba3d input=83ec0492be04d564]*/
{
- if (_ungetwch(unicode_char) == WEOF)
+ int res;
+
+ _Py_BEGIN_SUPPRESS_IPH
+ res = _ungetwch(unicode_char);
+ _Py_END_SUPPRESS_IPH
+
+ if (res == WEOF)
return PyErr_SetFromErrno(PyExc_IOError);
Py_RETURN_NONE;
}
@@ -382,7 +404,13 @@ static long
msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file)
/*[clinic end generated code: output=df291c7fe032eb68 input=bb8f721a604fcc45]*/
{
- return (long)_CrtSetReportFile(type, (_HFILE)file);
+ long res;
+
+ _Py_BEGIN_SUPPRESS_IPH
+ res = (long)_CrtSetReportFile(type, (_HFILE)file);
+ _Py_END_SUPPRESS_IPH
+
+ return res;
}
/*[clinic input]
@@ -403,7 +431,9 @@ msvcrt_CrtSetReportMode_impl(PyObject *module, int type, int mode)
{
int res;
+ _Py_BEGIN_SUPPRESS_IPH
res = _CrtSetReportMode(type, mode);
+ _Py_END_SUPPRESS_IPH
if (res == -1)
PyErr_SetFromErrno(PyExc_IOError);
return res;
@@ -424,7 +454,13 @@ static long
msvcrt_set_error_mode_impl(PyObject *module, int mode)
/*[clinic end generated code: output=ac4a09040d8ac4e3 input=046fca59c0f20872]*/
{
- return _set_error_mode(mode);
+ long res;
+
+ _Py_BEGIN_SUPPRESS_IPH
+ res = _set_error_mode(mode);
+ _Py_END_SUPPRESS_IPH
+
+ return res;
}
#endif /* _DEBUG */
@@ -443,7 +479,10 @@ msvcrt_SetErrorMode_impl(PyObject *module, unsigned int mode)
{
unsigned int res;
+ _Py_BEGIN_SUPPRESS_IPH
res = SetErrorMode(mode);
+ _Py_END_SUPPRESS_IPH
+
return PyLong_FromUnsignedLong(res);
}