mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
Fix sock_recvfrom_guts(): recvfrom() size is limited to an int on Windows, not
on other OSes!
This commit is contained in:
parent
3b5901143d
commit
e990c6e952
1 changed files with 8 additions and 8 deletions
|
@ -840,7 +840,7 @@ setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af)
|
||||||
return siz;
|
return siz;
|
||||||
}
|
}
|
||||||
/* special-case broadcast - inet_addr() below can return INADDR_NONE for
|
/* special-case broadcast - inet_addr() below can return INADDR_NONE for
|
||||||
* this */
|
* this */
|
||||||
if (strcmp(name, "255.255.255.255") == 0 ||
|
if (strcmp(name, "255.255.255.255") == 0 ||
|
||||||
strcmp(name, "<broadcast>") == 0) {
|
strcmp(name, "<broadcast>") == 0) {
|
||||||
struct sockaddr_in *sin;
|
struct sockaddr_in *sin;
|
||||||
|
@ -901,7 +901,7 @@ setipaddr(char *name, struct sockaddr *addr_ret, size_t addr_ret_size, int af)
|
||||||
#endif
|
#endif
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_INET_PTON */
|
#endif /* HAVE_INET_PTON */
|
||||||
|
|
||||||
/* perform a name resolution */
|
/* perform a name resolution */
|
||||||
|
@ -2833,7 +2833,7 @@ sock_recvfrom_guts(PySocketSockObject *s, char* cbuf, Py_ssize_t len, int flags,
|
||||||
memset(&addrbuf, 0, addrlen);
|
memset(&addrbuf, 0, addrlen);
|
||||||
timeout = internal_select_ex(s, 0, interval);
|
timeout = internal_select_ex(s, 0, interval);
|
||||||
if (!timeout) {
|
if (!timeout) {
|
||||||
#ifndef MS_WINDOWS
|
#ifdef MS_WINDOWS
|
||||||
if (len > INT_MAX)
|
if (len > INT_MAX)
|
||||||
len = INT_MAX;
|
len = INT_MAX;
|
||||||
n = recvfrom(s->sock_fd, cbuf, (int)len, flags,
|
n = recvfrom(s->sock_fd, cbuf, (int)len, flags,
|
||||||
|
@ -4702,7 +4702,7 @@ socket_dup(PyObject *self, PyObject *fdobj)
|
||||||
/* On UNIX, dup can be used to duplicate the file descriptor of a socket */
|
/* On UNIX, dup can be used to duplicate the file descriptor of a socket */
|
||||||
newfd = _Py_dup(fd);
|
newfd = _Py_dup(fd);
|
||||||
if (newfd == INVALID_SOCKET)
|
if (newfd == INVALID_SOCKET)
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
newfdobj = PyLong_FromSocket_t(newfd);
|
newfdobj = PyLong_FromSocket_t(newfd);
|
||||||
|
@ -5093,7 +5093,7 @@ socket_inet_pton(PyObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
size = sizeof(addr);
|
size = sizeof(addr);
|
||||||
ret = WSAStringToAddressA(ip, af, NULL, (LPSOCKADDR)&addr, &size);
|
ret = WSAStringToAddressA(ip, af, NULL, (LPSOCKADDR)&addr, &size);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
@ -5101,10 +5101,10 @@ socket_inet_pton(PyObject *self, PyObject *args)
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if(af == AF_INET) {
|
} else if(af == AF_INET) {
|
||||||
struct sockaddr_in *addr4 = (struct sockaddr_in*)&addr;
|
struct sockaddr_in *addr4 = (struct sockaddr_in*)&addr;
|
||||||
return PyBytes_FromStringAndSize((const char *)&(addr4->sin_addr),
|
return PyBytes_FromStringAndSize((const char *)&(addr4->sin_addr),
|
||||||
sizeof(addr4->sin_addr));
|
sizeof(addr4->sin_addr));
|
||||||
} else if (af == AF_INET6) {
|
} else if (af == AF_INET6) {
|
||||||
return PyBytes_FromStringAndSize((const char *)&(addr.sin6_addr),
|
return PyBytes_FromStringAndSize((const char *)&(addr.sin6_addr),
|
||||||
sizeof(addr.sin6_addr));
|
sizeof(addr.sin6_addr));
|
||||||
} else {
|
} else {
|
||||||
PyErr_SetString(PyExc_OSError, "unknown address family");
|
PyErr_SetString(PyExc_OSError, "unknown address family");
|
||||||
|
@ -5231,7 +5231,7 @@ socket_inet_ntop(PyObject *self, PyObject *args)
|
||||||
}
|
}
|
||||||
|
|
||||||
retlen = sizeof(ip);
|
retlen = sizeof(ip);
|
||||||
ret = WSAAddressToStringA((struct sockaddr*)&addr, addrlen, NULL,
|
ret = WSAAddressToStringA((struct sockaddr*)&addr, addrlen, NULL,
|
||||||
ip, &retlen);
|
ip, &retlen);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue