Check inet_pton retval and properly cleanup on error in unittest helper

remotes/origin/master-1.1.x
Gerardo Iglesias Galvan 14 years ago committed by Victor Julien
parent 58f713254e
commit 5ac8ab9a61

@ -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;
}
/**

Loading…
Cancel
Save