diff --git a/src/util-unittest-helper.c b/src/util-unittest-helper.c index 4332b0e3e0..7e19a67022 100644 --- a/src/util-unittest-helper.c +++ b/src/util-unittest-helper.c @@ -89,12 +89,13 @@ Packet *UTHBuildPacketIPV6Real(uint8_t *payload, uint16_t payload_len, p->ip6h = SCMalloc(sizeof(IPV6Hdr)); if (p->ip6h == NULL) - return NULL; + goto error; memset(p->ip6h, 0, sizeof(IPV6Hdr)); p->ip6h->s_ip6_nxt = ipproto; p->ip6h->s_ip6_plen = htons(payload_len + sizeof(TCPHdr)); - inet_pton(AF_INET6, src, &in); + if (inet_pton(AF_INET6, src, &in) <= 0) + goto error; p->src.addr_data32[0] = in[0]; p->src.addr_data32[1] = in[1]; p->src.addr_data32[2] = in[2]; @@ -105,7 +106,8 @@ Packet *UTHBuildPacketIPV6Real(uint8_t *payload, uint16_t payload_len, p->ip6h->ip6_src[2] = in[2]; p->ip6h->ip6_src[3] = in[3]; - inet_pton(AF_INET6, dst, &in); + if (inet_pton(AF_INET6, dst, &in) <= 0) + goto error; p->dst.addr_data32[0] = in[0]; p->dst.addr_data32[1] = in[1]; p->dst.addr_data32[2] = in[2]; @@ -118,13 +120,25 @@ Packet *UTHBuildPacketIPV6Real(uint8_t *payload, uint16_t payload_len, p->tcph = SCMalloc(sizeof(TCPHdr)); if (p->tcph == NULL) - return NULL; + goto error; memset(p->tcph, 0, sizeof(TCPHdr)); p->tcph->th_sport = htons(sport); p->tcph->th_dport = htons(dport); SET_PKT_LEN(p, sizeof(IPV6Hdr) + sizeof(TCPHdr) + payload_len); return p; + +error: + if (p != NULL) { + if (p->ip6h != NULL) { + SCFree(p->ip6h); + } + if (p->tcph != NULL) { + SCFree(p->tcph); + } + SCFree(p); + } + return NULL; } /** @@ -162,17 +176,19 @@ Packet *UTHBuildPacketReal(uint8_t *payload, uint16_t payload_len, p->payload_len = payload_len; p->proto = ipproto; - inet_pton(AF_INET, src, &in); + if (inet_pton(AF_INET, src, &in) <= 0) + goto error; p->src.addr_data32[0] = in.s_addr; p->sp = sport; - inet_pton(AF_INET, dst, &in); + if (inet_pton(AF_INET, dst, &in) <= 0) + goto error; p->dst.addr_data32[0] = in.s_addr; p->dp = dport; p->ip4h = (IPV4Hdr *)GET_PKT_DATA(p); if (p->ip4h == NULL) - return NULL; + goto error; p->ip4h->ip_src.s_addr = p->src.addr_data32[0]; p->ip4h->ip_dst.s_addr = p->dst.addr_data32[0]; @@ -185,7 +201,7 @@ Packet *UTHBuildPacketReal(uint8_t *payload, uint16_t payload_len, case IPPROTO_UDP: p->udph = (UDPHdr *)(GET_PKT_DATA(p) + sizeof(IPV4Hdr)); if (p->udph == NULL) - return NULL; + goto error; p->udph->uh_sport = sport; p->udph->uh_dport = dport; @@ -194,7 +210,7 @@ Packet *UTHBuildPacketReal(uint8_t *payload, uint16_t payload_len, case IPPROTO_TCP: p->tcph = (TCPHdr *)(GET_PKT_DATA(p) + sizeof(IPV4Hdr)); if (p->tcph == NULL) - return NULL; + goto error; p->tcph->th_sport = htons(sport); p->tcph->th_dport = htons(dport); @@ -203,7 +219,7 @@ Packet *UTHBuildPacketReal(uint8_t *payload, uint16_t payload_len, case IPPROTO_ICMP: p->icmpv4h = (ICMPV4Hdr *)(GET_PKT_DATA(p) + sizeof(IPV4Hdr)); if (p->icmpv4h == NULL) - return NULL; + goto error; hdr_offset += sizeof(ICMPV4Hdr); break; @@ -217,6 +233,10 @@ Packet *UTHBuildPacketReal(uint8_t *payload, uint16_t payload_len, p->payload = GET_PKT_DATA(p)+hdr_offset; return p; + +error: + SCFree(p); + return NULL; } /**