summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-09-11 10:37:30 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-09-11 10:37:30 (GMT)
commitec1a498a01da2b4df22413ff778529d84111c2ee (patch)
tree819f96f6bba39e4d1a3f01c0c909617d2e91b31a
parentdb4220ea09c2a36b3eb7edbde40b356c9caad10d (diff)
downloadcpython-ec1a498a01da2b4df22413ff778529d84111c2ee.zip
cpython-ec1a498a01da2b4df22413ff778529d84111c2ee.tar.gz
cpython-ec1a498a01da2b4df22413ff778529d84111c2ee.tar.bz2
Issue #24684: socket.socket.getaddrinfo() now calls
PyUnicode_AsEncodedString() instead of calling the encode() method of the host, to handle correctly custom string with an encode() method which doesn't return a byte string. The encoder of the IDNA codec is now called directly instead of calling the encode() method of the string.
-rw-r--r--Misc/NEWS6
-rw-r--r--Modules/socketmodule.c4
2 files changed, 7 insertions, 3 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index db250cd..e9fe6c7 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -81,6 +81,12 @@ Core and Builtins
Library
-------
+- Issue #24684: socket.socket.getaddrinfo() now calls
+ PyUnicode_AsEncodedString() instead of calling the encode() method of the
+ host, to handle correctly custom string with an encode() method which doesn't
+ return a byte string. The encoder of the IDNA codec is now called directly
+ instead of calling the encode() method of the string.
+
- Issue #24982: shutil.make_archive() with the "zip" format now adds entries
for directories (including empty directories) in ZIP file.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index b6f2bf5..23019ee 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -5213,9 +5213,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args, PyObject* kwargs)
if (hobj == Py_None) {
hptr = NULL;
} else if (PyUnicode_Check(hobj)) {
- _Py_IDENTIFIER(encode);
-
- idna = _PyObject_CallMethodId(hobj, &PyId_encode, "s", "idna");
+ idna = PyUnicode_AsEncodedString(hobj, "idna", NULL);
if (!idna)
return NULL;
assert(PyBytes_Check(idna));