Commit ab7dd183 authored by Petri Lehtinen's avatar Petri Lehtinen

#8853: Allow port to be of type long for socket.getaddrinfo()

parent 92014420
...@@ -644,9 +644,10 @@ class GeneralModuleTests(unittest.TestCase): ...@@ -644,9 +644,10 @@ class GeneralModuleTests(unittest.TestCase):
if SUPPORTS_IPV6: if SUPPORTS_IPV6:
socket.getaddrinfo('::1', 80) socket.getaddrinfo('::1', 80)
# port can be a string service name such as "http", a numeric # port can be a string service name such as "http", a numeric
# port number or None # port number (int or long), or None
socket.getaddrinfo(HOST, "http") socket.getaddrinfo(HOST, "http")
socket.getaddrinfo(HOST, 80) socket.getaddrinfo(HOST, 80)
socket.getaddrinfo(HOST, 80L)
socket.getaddrinfo(HOST, None) socket.getaddrinfo(HOST, None)
# test family and socktype filters # test family and socktype filters
infos = socket.getaddrinfo(HOST, None, socket.AF_INET) infos = socket.getaddrinfo(HOST, None, socket.AF_INET)
......
...@@ -160,6 +160,8 @@ Core and Builtins ...@@ -160,6 +160,8 @@ Core and Builtins
Library Library
------- -------
- Issue #8853: Allow port to be of type long for socket.getaddrinfo().
- Issue #16597: In buffered and text IO, call close() on the underlying stream - Issue #16597: In buffered and text IO, call close() on the underlying stream
if invoking flush() fails. if invoking flush() fails.
......
...@@ -4090,15 +4090,19 @@ socket_getaddrinfo(PyObject *self, PyObject *args) ...@@ -4090,15 +4090,19 @@ socket_getaddrinfo(PyObject *self, PyObject *args)
"getaddrinfo() argument 1 must be string or None"); "getaddrinfo() argument 1 must be string or None");
return NULL; return NULL;
} }
if (PyInt_Check(pobj)) { if (PyInt_Check(pobj) || PyLong_Check(pobj)) {
PyOS_snprintf(pbuf, sizeof(pbuf), "%ld", PyInt_AsLong(pobj)); long value = PyLong_AsLong(pobj);
if (value == -1 && PyErr_Occurred())
return NULL;
PyOS_snprintf(pbuf, sizeof(pbuf), "%ld", value);
pptr = pbuf; pptr = pbuf;
} else if (PyString_Check(pobj)) { } else if (PyString_Check(pobj)) {
pptr = PyString_AsString(pobj); pptr = PyString_AsString(pobj);
} else if (pobj == Py_None) { } else if (pobj == Py_None) {
pptr = (char *)NULL; pptr = (char *)NULL;
} else { } else {
PyErr_SetString(socket_error, "Int or String expected"); PyErr_SetString(socket_error,
"getaddrinfo() argument 2 must be integer or string");
goto err; goto err;
} }
memset(&hints, 0, sizeof(hints)); memset(&hints, 0, sizeof(hints));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment