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).
........
This commit is contained in:
Gregory P. Smith 2009-11-01 20:28:48 +00:00
parent 743d8319ef
commit 63e64add92
3 changed files with 19 additions and 2 deletions

View File

@ -385,6 +385,14 @@ class GeneralModuleTests(unittest.TestCase):
# Check that setting it to an invalid type raises TypeError # Check that setting it to an invalid type raises TypeError
self.assertRaises(TypeError, socket.setdefaulttimeout, "spam") 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): def testIPv4toString(self):
if not hasattr(socket, 'inet_pton'): if not hasattr(socket, 'inet_pton'):
return # No inet_pton() on this platform return # No inet_pton() on this platform

View File

@ -24,6 +24,9 @@ Core and Builtins
Library 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 - Issue #7246 & Issue #7208: getpass now properly flushes input before
reading from stdin so that existing input does not confuse it and reading from stdin so that existing input does not confuse it and
lead to incorrect entry or an IOError. It also properly flushes it lead to incorrect entry or an IOError. It also properly flushes it

View File

@ -3745,8 +3745,11 @@ socket_inet_aton(PyObject *self, PyObject *args)
#endif #endif
#if !defined(HAVE_INET_ATON) || defined(USE_INET_ATON_WEAKLINK) #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 */ /* Have to use inet_addr() instead */
unsigned long packed_addr; unsigned int packed_addr;
#endif #endif
char *ip_addr; char *ip_addr;
@ -5284,7 +5287,10 @@ int
inet_pton(int af, const char *src, void *dst) inet_pton(int af, const char *src, void *dst)
{ {
if (af == AF_INET) { 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); packed_addr = inet_addr(src);
if (packed_addr == INADDR_NONE) if (packed_addr == INADDR_NONE)
return 0; return 0;