New submission from Roman Zeyde <roman.ze...@gmail.com>:

The following code shouldn't fail without any warning at all:

>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.bind(('localhost', 70000))
>>> print(s.getsockname())
('127.0.0.1', 4464)

After looking through socketmodule.c (rev. 68450), it seems that AF_INET
case casts an "int port" into a "short addr->sin_port", and does not
checks for overflows:

        case AF_INET:
        {
                struct sockaddr_in* addr;
                char *host;
                int port, result;
                if (!PyTuple_Check(args)) {
                        PyErr_Format(
                                PyExc_TypeError,
                                "getsockaddrarg: "
                                "AF_INET address must be tuple, not %.500s",
                                Py_TYPE(args)->tp_name);
                        return 0;
                }
                if (!PyArg_ParseTuple(args, "eti:getsockaddrarg",
                                      "idna", &host, &port))
                        return 0;
                addr=(struct sockaddr_in*)addr_ret;
                result = setipaddr(host, (struct sockaddr *)addr,
                                   sizeof(*addr),  AF_INET);
                PyMem_Free(host);
                if (result < 0)
                        return 0;
                addr->sin_family = AF_INET;
                addr->sin_port = htons((short)port);
                *len_ret = sizeof *addr;
                return 1;
        }

----------
components: None
messages: 80794
nosy: roman.zeyde
severity: normal
status: open
title: getsockaddrarg() casts port number from int to short without any warning
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue5104>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to