Fixed missing free for subbuffers of packet.
authorArmin Novak <anovak@thinstuff.com>
Mon, 2 Sep 2013 13:06:25 +0000 (15:06 +0200)
committerArmin Novak <anovak@thinstuff.com>
Thu, 5 Sep 2013 10:14:34 +0000 (12:14 +0200)
libfreerdp/core/gateway/tsg.c

index 7ff6faa..33ce771 100644 (file)
@@ -694,6 +694,7 @@ BOOL TsProxyMakeTunnelCallWriteRequest(rdpTsg* tsg, PTUNNEL_CONTEXT_HANDLE_NOSER
 
 BOOL TsProxyMakeTunnelCallReadResponse(rdpTsg* tsg, RPC_PDU* pdu)
 {
+       BOOL rc = TRUE;
        BYTE* buffer;
        UINT32 length;
        UINT32 offset;
@@ -799,15 +800,22 @@ BOOL TsProxyMakeTunnelCallReadResponse(rdpTsg* tsg, RPC_PDU* pdu)
                default:
                        fprintf(stderr, "TsProxyMakeTunnelCallReadResponse: unexpected message type: %d\n",
                                        SwitchValue);
-                       free(packet);
-                       return FALSE;
+                       rc = FALSE;
                        break;
        }
 
        if (packet)
+       {
+               if (packet->tsgPacket.packetMsgResponse)
+               {
+                       if (packet->tsgPacket.packetMsgResponse->messagePacket.reauthMessage)
+                               free(packet->tsgPacket.packetMsgResponse->messagePacket.reauthMessage);
+                       free(packet->tsgPacket.packetMsgResponse);
+               }
                free(packet);
+       }
 
-       return TRUE;
+       return rc;
 }
 
 BOOL TsProxyMakeTunnelCall(rdpTsg* tsg, PTUNNEL_CONTEXT_HANDLE_NOSERIALIZE tunnelContext,