summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2009-11-01 20:28:48 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2009-11-01 20:28:48 (GMT)
commit63e64add92fef0649b64c39dc4e048d613bedf52 (patch)
tree35af01d86014074c70e950c2b8665ccd2e2ea56b
parent743d8319ef71641a0b0efa53aad6590b6cd2835b (diff)
downloadcpython-63e64add92fef0649b64c39dc4e048d613bedf52.zip
cpython-63e64add92fef0649b64c39dc4e048d613bedf52.tar.gz
cpython-63e64add92fef0649b64c39dc4e048d613bedf52.tar.bz2
Merged revisions 69519 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r69519 | gregory.p.smith | 2009-02-11 15:45:25 -0800 (Wed, 11 Feb 2009) | 3 lines Issue #1008086: Fixes socket.inet_aton() to always return 4 bytes even on LP64 platforms (most 64-bit Linux, bsd, unix systems). ........
-rw-r--r--Lib/test/test_socket.py8
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/socketmodule.c10
3 files changed, 19 insertions, 2 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index dabdcfe..7380e3e 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -385,6 +385,14 @@ class GeneralModuleTests(unittest.TestCase):
# Check that setting it to an invalid type raises TypeError
self.assertRaises(TypeError, socket.setdefaulttimeout, "spam")
+ def testIPv4_inet_aton_fourbytes(self):
+ if not hasattr(socket, 'inet_aton'):
+ return # No inet_aton, nothing to check
+ # Test that issue1008086 and issue767150 are fixed.
+ # It must return 4 bytes.
+ self.assertEquals('\x00'*4, socket.inet_aton('0.0.0.0'))
+ self.assertEquals('\xff'*4, socket.inet_aton('255.255.255.255'))
+
def testIPv4toString(self):
if not hasattr(socket, 'inet_pton'):
return # No inet_pton() on this platform
diff --git a/Misc/NEWS b/Misc/NEWS
index caec215..0b2bd7d 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -24,6 +24,9 @@ Core and Builtins
Library
-------
+- Issue #1008086: Fixed socket.inet_aton() to always return 4 bytes even on
+ LP64 platforms (most 64-bit Linux, bsd, unix systems).
+
- Issue #7246 & Issue #7208: getpass now properly flushes input before
reading from stdin so that existing input does not confuse it and
lead to incorrect entry or an IOError. It also properly flushes it
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 9591c12..b1b7141 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -3745,8 +3745,11 @@ socket_inet_aton(PyObject *self, PyObject *args)
#endif
#if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK)
+#if (SIZEOF_INT != 4)
+#error "Not sure if in_addr_t exists and int is not 32-bits."
+#endif
/* Have to use inet_addr() instead */
- unsigned long packed_addr;
+ unsigned int packed_addr;
#endif
char *ip_addr;
@@ -5284,7 +5287,10 @@ int
inet_pton(int af, const char *src, void *dst)
{
if (af == AF_INET) {
- long packed_addr;
+#if (SIZEOF_INT != 4)
+#error "Not sure if in_addr_t exists and int is not 32-bits."
+#endif
+ unsigned int packed_addr;
packed_addr = inet_addr(src);
if (packed_addr == INADDR_NONE)
return 0;