diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/network/proto.c | 48 | 
1 files changed, 26 insertions, 22 deletions
| diff --git a/src/network/proto.c b/src/network/proto.c index 46ecca89..43aa17a4 100644 --- a/src/network/proto.c +++ b/src/network/proto.c @@ -4,25 +4,28 @@  /* do we really need all these?? */  static int idx; -static const unsigned char protos[][8] = { -	"\000ip", -	"\001icmp", -	"\002igmp", -	"\003ggp", -	"\006tcp", -	"\014pup", -	"\021udp", -	"\026idp", -	"\051ipv6", -	"\057gre", -	"\062esp", -	"\063ah", -	"\072icmpv6", -	"\131ospf", -	"\136ipip", -	"\147pim", -	"\377raw", -	"\0\0" +static const unsigned char protos[] = { +	"\000ip\0" +	"\001icmp\0" +	"\002igmp\0" +	"\003ggp\0" +	"\006tcp\0" +	"\014pup\0" +	"\021udp\0" +	"\026idp\0" +	"\051ipv6\0" +	"\053ipv6-route\0" +	"\054ipv6-frag\0" +	"\057gre\0" +	"\062esp\0" +	"\063ah\0" +	"\072ipv6-icmp\0" +	"\073ipv6-nonxt\0" +	"\074ipv6-opts\0" +	"\131ospf\0" +	"\136ipip\0" +	"\147pim\0" +	"\377raw"  };  void endprotoent(void) @@ -39,10 +42,11 @@ struct protoent *getprotoent(void)  {  	static struct protoent p;  	static const char *aliases; -	if (!protos[idx][1]) return NULL; -	p.p_proto = protos[idx][0]; -	p.p_name = (char *)protos[idx++]+1; +	if (idx >= sizeof protos) return NULL; +	p.p_proto = protos[idx]; +	p.p_name = (char *)&protos[idx+1];  	p.p_aliases = (char **)&aliases; +	idx += strlen(p.p_name) + 2;  	return &p;  } | 
