From bebceec8eb1b9f6430c8caefca50776cc12dd4a2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 24 Mar 2025 14:30:39 +0100 Subject: [PATCH 1/2] gh-111178: Fix function signatures for test_socket Add unicode_fsdecode() wrapper for PyUnicode_DecodeFSDefault() to use the correct API for Py_BuildValue() converter API. --- Modules/socketmodule.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 795451d48e7b35..0583a248a8e3de 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1380,6 +1380,11 @@ makebdaddr(bdaddr_t *bdaddr) } #endif +PyObject* +unicode_fsdecode(void *arg) +{ + return PyUnicode_DecodeFSDefault((const char*)arg); +} /* Create an object representing the given socket address, suitable for passing it back to bind(), connect() etc. @@ -1616,7 +1621,7 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) #ifdef CAN_ISOTP case CAN_ISOTP: { - return Py_BuildValue("O&kk", PyUnicode_DecodeFSDefault, + return Py_BuildValue("O&kk", unicode_fsdecode, ifname, a->can_addr.tp.rx_id, a->can_addr.tp.tx_id); @@ -1625,7 +1630,7 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) #ifdef CAN_J1939 case CAN_J1939: { - return Py_BuildValue("O&KIB", PyUnicode_DecodeFSDefault, + return Py_BuildValue("O&KIB", unicode_fsdecode, ifname, (unsigned long long)a->can_addr.j1939.name, (unsigned int)a->can_addr.j1939.pgn, @@ -1634,7 +1639,7 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) #endif /* CAN_J1939 */ default: { - return Py_BuildValue("(O&)", PyUnicode_DecodeFSDefault, + return Py_BuildValue("(O&)", unicode_fsdecode, ifname); } } @@ -7161,7 +7166,7 @@ socket_if_nameindex(PyObject *self, PyObject *arg) } #endif PyObject *ni_tuple = Py_BuildValue("IO&", - ni[i].if_index, PyUnicode_DecodeFSDefault, ni[i].if_name); + ni[i].if_index, unicode_fsdecode, ni[i].if_name); if (ni_tuple == NULL || PyList_Append(list, ni_tuple) == -1) { Py_XDECREF(ni_tuple); From 9e49ae972cd892a8d143c941586fa0a0f3bbd171 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 24 Mar 2025 15:25:29 +0100 Subject: [PATCH 2/2] Apply suggestions --- Modules/socketmodule.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 0583a248a8e3de..2e48a72a72f27c 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -1622,25 +1622,24 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto) case CAN_ISOTP: { return Py_BuildValue("O&kk", unicode_fsdecode, - ifname, - a->can_addr.tp.rx_id, - a->can_addr.tp.tx_id); + ifname, + a->can_addr.tp.rx_id, + a->can_addr.tp.tx_id); } #endif /* CAN_ISOTP */ #ifdef CAN_J1939 case CAN_J1939: { return Py_BuildValue("O&KIB", unicode_fsdecode, - ifname, - (unsigned long long)a->can_addr.j1939.name, - (unsigned int)a->can_addr.j1939.pgn, - a->can_addr.j1939.addr); + ifname, + (unsigned long long)a->can_addr.j1939.name, + (unsigned int)a->can_addr.j1939.pgn, + a->can_addr.j1939.addr); } #endif /* CAN_J1939 */ default: { - return Py_BuildValue("(O&)", unicode_fsdecode, - ifname); + return Py_BuildValue("(O&)", unicode_fsdecode, ifname); } } }