Issue #24684: socket.socket.getaddrinfo() now calls
PyUnicode_AsEncodedString() instead of calling the encode() method of the
host, to handle correctly custom unicode 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.
diff --git a/Misc/NEWS b/Misc/NEWS
index e179108..f1b5ff9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -37,6 +37,12 @@
Library
-------
+- Issue #24684: socket.socket.getaddrinfo() now calls
+ PyUnicode_AsEncodedString() instead of calling the encode() method of the
+ host, to handle correctly custom unicode 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 5def531..ced9343 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -4158,7 +4158,7 @@
if (hobj == Py_None) {
hptr = NULL;
} else if (PyUnicode_Check(hobj)) {
- idna = PyObject_CallMethod(hobj, "encode", "s", "idna");
+ idna = PyUnicode_AsEncodedString(hobj, "idna", NULL);
if (!idna)
return NULL;
hptr = PyString_AsString(idna);