summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Buchkovsky <olex.buchkovsky@gmail.com>2018-09-04 16:10:28 (GMT)
committerVictor Stinner <vstinner@redhat.com>2018-09-04 16:10:28 (GMT)
commit266f4904a222a784080e29aad0916849e507515d (patch)
treeb4ae212e6a9c6103e38d2d9679566b407bf0e81b
parent7917aadb3edb7616d6164c5eaba24df6ac0a5fc6 (diff)
downloadcpython-266f4904a222a784080e29aad0916849e507515d.zip
cpython-266f4904a222a784080e29aad0916849e507515d.tar.gz
cpython-266f4904a222a784080e29aad0916849e507515d.tar.bz2
bpo-34563: Fix for invalid assert on big output of multiprocessing.Process (GH-9027)
Fix for invalid assert on big output of multiprocessing.Process.
-rw-r--r--Misc/NEWS.d/next/Library/2018-09-01-20-43-10.bpo-34563.7NQK7B.rst1
-rw-r--r--Modules/_winapi.c10
-rw-r--r--Modules/clinic/_winapi.c.h8
3 files changed, 10 insertions, 9 deletions
diff --git a/Misc/NEWS.d/next/Library/2018-09-01-20-43-10.bpo-34563.7NQK7B.rst b/Misc/NEWS.d/next/Library/2018-09-01-20-43-10.bpo-34563.7NQK7B.rst
new file mode 100644
index 0000000..9127af0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2018-09-01-20-43-10.bpo-34563.7NQK7B.rst
@@ -0,0 +1 @@
+On Windows, fix multiprocessing.Connection for very large read: fix _winapi.PeekNamedPipe() and _winapi.ReadFile() for read larger than INT_MAX (usually 2^31-1). \ No newline at end of file
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
index 30f269f..44788e5 100644
--- a/Modules/_winapi.c
+++ b/Modules/_winapi.c
@@ -1338,7 +1338,7 @@ _winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size)
}
if (_PyBytes_Resize(&buf, nread))
return NULL;
- return Py_BuildValue("Nii", buf, navail, nleft);
+ return Py_BuildValue("NII", buf, navail, nleft);
}
else {
Py_BEGIN_ALLOW_THREADS
@@ -1347,7 +1347,7 @@ _winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size)
if (!ret) {
return PyErr_SetExcFromWindowsErr(PyExc_OSError, 0);
}
- return Py_BuildValue("ii", navail, nleft);
+ return Py_BuildValue("II", navail, nleft);
}
}
@@ -1355,14 +1355,14 @@ _winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size)
_winapi.ReadFile
handle: HANDLE
- size: int
+ size: DWORD
overlapped as use_overlapped: bool(accept={int}) = False
[clinic start generated code]*/
static PyObject *
-_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size,
+_winapi_ReadFile_impl(PyObject *module, HANDLE handle, DWORD size,
int use_overlapped)
-/*[clinic end generated code: output=492029ca98161d84 input=3f0fde92f74de59a]*/
+/*[clinic end generated code: output=d3d5b44a8201b944 input=08c439d03a11aac5]*/
{
DWORD nread;
PyObject *buf;
diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h
index b14f087..c66522e 100644
--- a/Modules/clinic/_winapi.c.h
+++ b/Modules/clinic/_winapi.c.h
@@ -673,7 +673,7 @@ PyDoc_STRVAR(_winapi_ReadFile__doc__,
{"ReadFile", (PyCFunction)_winapi_ReadFile, METH_FASTCALL|METH_KEYWORDS, _winapi_ReadFile__doc__},
static PyObject *
-_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size,
+_winapi_ReadFile_impl(PyObject *module, HANDLE handle, DWORD size,
int use_overlapped);
static PyObject *
@@ -681,9 +681,9 @@ _winapi_ReadFile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyOb
{
PyObject *return_value = NULL;
static const char * const _keywords[] = {"handle", "size", "overlapped", NULL};
- static _PyArg_Parser _parser = {"" F_HANDLE "i|i:ReadFile", _keywords, 0};
+ static _PyArg_Parser _parser = {"" F_HANDLE "k|i:ReadFile", _keywords, 0};
HANDLE handle;
- int size;
+ DWORD size;
int use_overlapped = 0;
if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
@@ -941,4 +941,4 @@ _winapi_GetFileType(PyObject *module, PyObject *const *args, Py_ssize_t nargs, P
exit:
return return_value;
}
-/*[clinic end generated code: output=ec7f36eb7efc9d00 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=baaf3d379b91be0a input=a9049054013a1b77]*/