]> granicus.if.org Git - python/commitdiff
Release host name memory. Fixes #783312. Will backport to 2.3.
authorMartin v. Löwis <martin@v.loewis.de>
Thu, 7 Aug 2003 11:55:15 +0000 (11:55 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Thu, 7 Aug 2003 11:55:15 +0000 (11:55 +0000)
Modules/socketmodule.c

index d40233902e9e9ac66a5505453c9bd15559d3eea9..36b4b3d7892599e644351958b383233e25b492b1 100644 (file)
@@ -956,7 +956,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
        {
                struct sockaddr_in* addr;
                char *host;
-               int port;
+               int port, result;
                addr=(struct sockaddr_in*)&(s->sock_addr).in;
                if (!PyTuple_Check(args)) {
                        PyErr_Format(
@@ -969,7 +969,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                if (!PyArg_ParseTuple(args, "eti:getsockaddrarg", 
                                      "idna", &host, &port))
                        return 0;
-               if (setipaddr(host, (struct sockaddr *)addr, sizeof(*addr),  AF_INET) < 0)
+                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);
@@ -983,7 +986,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
        {
                struct sockaddr_in6* addr;
                char *host;
-               int port, flowinfo, scope_id;
+               int port, flowinfo, scope_id, result;
                addr = (struct sockaddr_in6*)&(s->sock_addr).in6;
                flowinfo = scope_id = 0;
                if (!PyArg_ParseTuple(args, "eti|ii", 
@@ -991,7 +994,10 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
                                      &scope_id)) {
                        return 0;
                }
-               if (setipaddr(host, (struct sockaddr *)addr,  sizeof(*addr), AF_INET6) < 0)
+                result = setipaddr(host, (struct sockaddr *)addr,  
+                                   sizeof(*addr), AF_INET6);
+                PyMem_Free(host);
+                if (result < 0)
                        return 0;
                addr->sin6_family = s->sock_family;
                addr->sin6_port = htons((short)port);
@@ -3100,7 +3106,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args)
                pptr = (char *)NULL;
        } else {
                PyErr_SetString(socket_error, "Int or String expected");
-               return NULL;
+                goto err;
        }
        memset(&hints, 0, sizeof(hints));
        hints.ai_family = family;
@@ -3114,7 +3120,7 @@ socket_getaddrinfo(PyObject *self, PyObject *args)
        RELEASE_GETADDRINFO_LOCK  /* see comment in setipaddr() */
        if (error) {
                set_gaierror(error);
-               return NULL;
+               goto err;
        }
 
        if ((all = PyList_New(0)) == NULL)