Addressing SF bug #643005, implement socket.inet_aton() using
inet_aton() rather than inet_addr() -- the latter is obsolete because it has a problem: "255.255.255.255" is a valid address but indistinguishable from an error. (I'm not sure if inet_aton() exists everywhere -- in case it doesn't, I've left the old code in with an #ifdef.)
This commit is contained in:
parent
2294c0d4ec
commit
ad05cdfa1f
|
@ -2713,11 +2713,26 @@ socket_inet_aton(PyObject *self, PyObject *args)
|
|||
|
||||
/* Have to use inet_addr() instead */
|
||||
char *ip_addr;
|
||||
unsigned long packed_addr;
|
||||
#if 1
|
||||
struct in_addr buf;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "s:inet_aton", &ip_addr)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (inet_aton(ip_addr, &buf))
|
||||
return PyString_FromStringAndSize((char *)(&buf),
|
||||
sizeof(buf));
|
||||
|
||||
PyErr_SetString(socket_error,
|
||||
"illegal IP address string passed to inet_aton");
|
||||
return NULL;
|
||||
|
||||
#else /* In case you don't have inet_aton() */
|
||||
/* XXX Problem here: inet_aton('255.255.255.255') raises
|
||||
an exception while it should be a valid address. */
|
||||
unsigned long packed_addr;
|
||||
|
||||
packed_addr = inet_addr(ip_addr);
|
||||
|
||||
if (packed_addr == INADDR_NONE) { /* invalid address */
|
||||
|
@ -2728,6 +2743,7 @@ socket_inet_aton(PyObject *self, PyObject *args)
|
|||
|
||||
return PyString_FromStringAndSize((char *) &packed_addr,
|
||||
sizeof(packed_addr));
|
||||
#endif
|
||||
}
|
||||
|
||||
PyDoc_STRVAR(inet_ntoa_doc,
|
||||
|
|
Loading…
Reference in New Issue