From ea07a138bbcf1a5a8953cd55679d2059abcebc49 Mon Sep 17 00:00:00 2001 From: sehraf Date: Tue, 28 Jun 2016 17:37:22 +0200 Subject: [PATCH] fix TcpPacket::readPacket --- libretroshare/src/tcponudp/tcppacket.cc | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/libretroshare/src/tcponudp/tcppacket.cc b/libretroshare/src/tcponudp/tcppacket.cc index 3f308de1a..3351cf168 100644 --- a/libretroshare/src/tcponudp/tcppacket.cc +++ b/libretroshare/src/tcponudp/tcppacket.cc @@ -186,19 +186,26 @@ int TcpPacket::readPacket(void *buf, int size) if (data) { free(data); + data = NULL ; } datasize = size - TCP_PSEUDO_HDR_SIZE; - - if(datasize == 0) // this happens! - { - data = NULL ; - return 0 ; - } - + + // this happens for control packets (e.g. syn/ack/fin) + if(datasize == 0) + { + // data is already NULL + // just return packet size + return size; + } + data = (uint8 *) rs_malloc(datasize); if(data == NULL) + { + // malloc failed! + // return 0 to drop packet (will be retransmitted eventually) return 0 ; + } /* now the data */ memcpy(data, (void *) &(((uint8 *) buf)[20]), datasize);