diff options
-rw-r--r-- | Lib/test/test_socket.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Modules/socketmodule.c | 19 |
3 files changed, 17 insertions, 7 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index bf2ecae..b138a2d 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -380,10 +380,12 @@ class GeneralModuleTests(unittest.TestCase): self.assertEquals('\xff\x00\xff\x00', f('255.0.255.0')) self.assertEquals('\xaa\xaa\xaa\xaa', f('170.170.170.170')) self.assertEquals('\x01\x02\x03\x04', f('1.2.3.4')) + self.assertEquals('\xff\xff\xff\xff', f('255.255.255.255')) self.assertEquals('\x00\x00\x00\x00', g('0.0.0.0')) self.assertEquals('\xff\x00\xff\x00', g('255.0.255.0')) self.assertEquals('\xaa\xaa\xaa\xaa', g('170.170.170.170')) + self.assertEquals('\xff\xff\xff\xff', g('255.255.255.255')) def testIPv6toString(self): if not hasattr(socket, 'inet_pton'): @@ -55,6 +55,9 @@ Core and builtins Extension Modules ----------------- +- Patch #756021: Special-case socket.inet_aton('255.255.255.255') for + platforms that don't have inet_aton(). + - Bug #1215928: Fix bz2.BZ2File.seek() for 64-bit file offsets. - Bug #1191043: Fix bz2.BZ2File.(x)readlines() for files containing one line diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 3c17e9c..059153d 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -3238,14 +3238,19 @@ socket_inet_aton(PyObject *self, PyObject *args) return NULL; #else /* ! HAVE_INET_ATON */ - /* XXX Problem here: inet_aton('255.255.255.255') raises - an exception while it should be a valid address. */ - packed_addr = inet_addr(ip_addr); + /* special-case this address as inet_addr might return INADDR_NONE + * for this */ + if (strcmp(ip_addr, "255.255.255.255") == 0) { + packed_addr = 0xFFFFFFFF; + } else { + + packed_addr = inet_addr(ip_addr); - if (packed_addr == INADDR_NONE) { /* invalid address */ - PyErr_SetString(socket_error, - "illegal IP address string passed to inet_aton"); - return NULL; + if (packed_addr == INADDR_NONE) { /* invalid address */ + PyErr_SetString(socket_error, + "illegal IP address string passed to inet_aton"); + return NULL; + } } return PyString_FromStringAndSize((char *) &packed_addr, sizeof(packed_addr)); |