[PATCH] wininet: move freeing netconn into create_netconn_socket (Coverity)
Marcus Meissner
marcus at jet.franken.de
Wed Nov 14 12:59:31 CST 2012
create_netconn_socket incorrectly assumed ownership
of netconn and freed it on error, move it to the respective
callers.
(create_conn needs a free, NETCON_secure_connect() will go back
and then get to open_http_connection() which frees netconn already
in the error path.
Ciao, Marcus
---
dlls/wininet/netconnection.c | 11 ++++++-----
1 Datei geändert, 6 Zeilen hinzugefügt(+), 5 Zeilen entfernt(-)
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index b746b54..2abb676 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
@@ -655,7 +655,6 @@ static DWORD create_netconn_socket(server_t *server, netconn_t *netconn, DWORD t
if (!res)
{
closesocket(netconn->socketFD);
- heap_free(netconn);
return ERROR_INTERNET_CANNOT_CONNECT;
}
else if (res > 0)
@@ -674,10 +673,8 @@ static DWORD create_netconn_socket(server_t *server, netconn_t *netconn, DWORD t
ioctlsocket(netconn->socketFD, FIONBIO, &flag);
}
}
- if(result == -1) {
- heap_free(netconn);
+ if(result == -1)
return sock_get_error(errno);
- }
#ifdef TCP_NODELAY
flag = 1;
@@ -717,9 +714,13 @@ DWORD create_netconn(BOOL useSSL, server_t *server, DWORD security_flags, BOOL m
list_init(&netconn->pool_entry);
result = create_netconn_socket(server, netconn, timeout);
+ if (result != ERROR_SUCCESS) {
+ heap_free(netconn);
+ return result;
+ }
+
server_addref(server);
netconn->server = server;
-
*ret = netconn;
return result;
}
--
1.7.10.4
More information about the wine-patches
mailing list