summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christophe Fergeau2008-08-12 23:03:00 +0200
committerGravatar Jonathan Beck2008-08-21 19:01:35 +0200
commitae11cc812ed4e4ec011a960b77973e66a8694d10 (patch)
treef4c08288e04875bf511d53e6e74dc9c26517d4c3
parentf526a360da6aba9a015a1685db03d587ab7c4dbe (diff)
downloadlibimobiledevice-ae11cc812ed4e4ec011a960b77973e66a8694d10.tar.gz
libimobiledevice-ae11cc812ed4e4ec011a960b77973e66a8694d10.tar.bz2
Don't leak "response" in mux_connect
-rw-r--r--src/usbmux.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/usbmux.c b/src/usbmux.c
index 511bb01..a71439d 100644
--- a/src/usbmux.c
+++ b/src/usbmux.c
@@ -122,8 +122,6 @@ usbmux_connection *mux_connect(iPhone *phone, uint16 s_port, uint16 d_port) {
// Initialize connection stuff
usbmux_connection *new_connection = (usbmux_connection*)malloc(sizeof(usbmux_connection));
new_connection->header = new_mux_packet(s_port, d_port);
- usbmux_tcp_header *response;
- response = (usbmux_tcp_header*)malloc(sizeof(usbmux_tcp_header));
// blargg
if (new_connection && new_connection->header) {
new_connection->header->tcp_flags = 0x02;
@@ -131,9 +129,14 @@ usbmux_connection *mux_connect(iPhone *phone, uint16 s_port, uint16 d_port) {
new_connection->header->length16 = htons(new_connection->header->length16);
if (send_to_phone(phone, (char*)new_connection->header, sizeof(usbmux_tcp_header)) >= 0) {
+ usbmux_tcp_header *response;
+ response = (usbmux_tcp_header*)malloc(sizeof(usbmux_tcp_header));
bytes = recv_from_phone(phone, (char*)response, sizeof(*response));
- if (response->tcp_flags != 0x12) return NULL;
- else {
+ if (response->tcp_flags != 0x12) {
+ free(response);
+ return NULL;
+ } else {
+ free(response);
if (debug) printf("mux_connect: connection success\n");
new_connection->header->tcp_flags = 0x10;
new_connection->header->scnt = 1;