Kaydet (Commit) c8d2fb41 authored tarafından Victor Stinner's avatar Victor Stinner

Merge 3.5: Issue #26227

...@@ -159,6 +159,10 @@ Core and Builtins ...@@ -159,6 +159,10 @@ Core and Builtins
Library Library
------- -------
- Issue #26227: On Windows, getnameinfo(), gethostbyaddr() and
gethostbyname_ex() functions of the socket module now decode the hostname
from the ANSI code page rather than UTF-8.
- Issue #26099: The site module now writes an error into stderr if - Issue #26099: The site module now writes an error into stderr if
sitecustomize module can be imported but executing the module raise an sitecustomize module can be imported but executing the module raise an
ImportError. Same change for usercustomize. ImportError. Same change for usercustomize.
......
...@@ -4519,6 +4519,19 @@ PyDoc_STRVAR(gethostbyname_doc, ...@@ -4519,6 +4519,19 @@ PyDoc_STRVAR(gethostbyname_doc,
Return the IP address (a string of the form '255.255.255.255') for a host."); Return the IP address (a string of the form '255.255.255.255') for a host.");
static PyObject*
sock_decode_hostname(const char *name)
{
#ifdef MS_WINDOWS
/* Issue #26227: gethostbyaddr() returns a string encoded
* to the ANSI code page */
return PyUnicode_DecodeFSDefault(name);
#else
/* Decode from UTF-8 */
return PyUnicode_FromString(name);
#endif
}
/* Convenience function common to gethostbyname_ex and gethostbyaddr */ /* Convenience function common to gethostbyname_ex and gethostbyaddr */
static PyObject * static PyObject *
...@@ -4529,6 +4542,7 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af) ...@@ -4529,6 +4542,7 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af)
PyObject *name_list = (PyObject *)NULL; PyObject *name_list = (PyObject *)NULL;
PyObject *addr_list = (PyObject *)NULL; PyObject *addr_list = (PyObject *)NULL;
PyObject *tmp; PyObject *tmp;
PyObject *name;
if (h == NULL) { if (h == NULL) {
/* Let's get real error message to return */ /* Let's get real error message to return */
...@@ -4637,7 +4651,10 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af) ...@@ -4637,7 +4651,10 @@ gethost_common(struct hostent *h, struct sockaddr *addr, size_t alen, int af)
goto err; goto err;
} }
rtn_tuple = Py_BuildValue("sOO", h->h_name, name_list, addr_list); name = sock_decode_hostname(h->h_name);
if (name == NULL)
goto err;
rtn_tuple = Py_BuildValue("NOO", name, name_list, addr_list);
err: err:
Py_XDECREF(name_list); Py_XDECREF(name_list);
...@@ -5619,6 +5636,7 @@ socket_getnameinfo(PyObject *self, PyObject *args) ...@@ -5619,6 +5636,7 @@ socket_getnameinfo(PyObject *self, PyObject *args)
struct addrinfo hints, *res = NULL; struct addrinfo hints, *res = NULL;
int error; int error;
PyObject *ret = (PyObject *)NULL; PyObject *ret = (PyObject *)NULL;
PyObject *name;
flags = flowinfo = scope_id = 0; flags = flowinfo = scope_id = 0;
if (!PyArg_ParseTuple(args, "Oi:getnameinfo", &sa, &flags)) if (!PyArg_ParseTuple(args, "Oi:getnameinfo", &sa, &flags))
...@@ -5682,7 +5700,11 @@ socket_getnameinfo(PyObject *self, PyObject *args) ...@@ -5682,7 +5700,11 @@ socket_getnameinfo(PyObject *self, PyObject *args)
set_gaierror(error); set_gaierror(error);
goto fail; goto fail;
} }
ret = Py_BuildValue("ss", hbuf, pbuf);
name = sock_decode_hostname(hbuf);
if (name == NULL)
goto fail;
ret = Py_BuildValue("Ns", name, pbuf);
fail: fail:
if (res) if (res)
......
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