summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbggardner <brent@ebrent.net>2019-09-12 10:02:48 (GMT)
committerBenjamin Peterson <benjamin@python.org>2019-09-12 10:02:48 (GMT)
commit954900a3f98a8c0dea14dd575490237f3f8626b3 (patch)
tree20376e6ee25b3d01c27e6294ddedb87ff050a03e
parent64535fc6c0712caef0bc46be30e661f7ccf8280e (diff)
downloadcpython-954900a3f98a8c0dea14dd575490237f3f8626b3.zip
cpython-954900a3f98a8c0dea14dd575490237f3f8626b3.tar.gz
cpython-954900a3f98a8c0dea14dd575490237f3f8626b3.tar.bz2
closes bpo-37405: Make socket.getsockname() always return a tuple for AF_CAN. (GH-14392)
This fixes a regression from 3.5. In recent releases, `getsockname()` in the AF_CAN case has returned a string.
-rwxr-xr-xLib/test/test_socket.py4
-rw-r--r--Misc/NEWS.d/next/Library/2019-09-11-20-27-41.bpo-37405.MG5xiY.rst2
-rw-r--r--Modules/socketmodule.c2
3 files changed, 6 insertions, 2 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index b855c52..b745490 100755
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -1948,7 +1948,9 @@ class BasicCANTest(unittest.TestCase):
def testBindAny(self):
with socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) as s:
- s.bind(('', ))
+ address = ('', )
+ s.bind(address)
+ self.assertEqual(s.getsockname(), address)
def testTooLongInterfaceName(self):
# most systems limit IFNAMSIZ to 16, take 1024 to be sure
diff --git a/Misc/NEWS.d/next/Library/2019-09-11-20-27-41.bpo-37405.MG5xiY.rst b/Misc/NEWS.d/next/Library/2019-09-11-20-27-41.bpo-37405.MG5xiY.rst
new file mode 100644
index 0000000..09e1097
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-09-11-20-27-41.bpo-37405.MG5xiY.rst
@@ -0,0 +1,2 @@
+Fixed regression bug for socket.getsockname() for non-CAN_ISOTP AF_CAN
+address family sockets by returning a 1-tuple instead of string.
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 3548b0c..c649fa3 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1563,7 +1563,7 @@ makesockaddr(SOCKET_T sockfd, struct sockaddr *addr, size_t addrlen, int proto)
#endif /* CAN_ISOTP */
default:
{
- return Py_BuildValue("O&", PyUnicode_DecodeFSDefault,
+ return Py_BuildValue("(O&)", PyUnicode_DecodeFSDefault,
ifname);
}
}