Mercurial > hg > nginx
comparison src/core/ngx_inet.c @ 6012:550212836c8f
Overflow detection in ngx_inet_addr().
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Tue, 17 Mar 2015 00:26:22 +0300 |
parents | d39ef821d03e |
children | bc47a7a8159c |
comparison
equal
deleted
inserted
replaced
6011:429a8c65f0a7 | 6012:550212836c8f |
---|---|
25 octet = 0; | 25 octet = 0; |
26 n = 0; | 26 n = 0; |
27 | 27 |
28 for (p = text; p < text + len; p++) { | 28 for (p = text; p < text + len; p++) { |
29 | 29 |
30 if (octet > 255) { | |
31 return INADDR_NONE; | |
32 } | |
33 | |
30 c = *p; | 34 c = *p; |
31 | 35 |
32 if (c >= '0' && c <= '9') { | 36 if (c >= '0' && c <= '9') { |
33 octet = octet * 10 + (c - '0'); | 37 octet = octet * 10 + (c - '0'); |
34 continue; | 38 continue; |
35 } | 39 } |
36 | 40 |
37 if (c == '.' && octet < 256) { | 41 if (c == '.') { |
38 addr = (addr << 8) + octet; | 42 addr = (addr << 8) + octet; |
39 octet = 0; | 43 octet = 0; |
40 n++; | 44 n++; |
41 continue; | 45 continue; |
42 } | 46 } |
43 | 47 |
44 return INADDR_NONE; | 48 return INADDR_NONE; |
45 } | 49 } |
46 | 50 |
47 if (n == 3 && octet < 256) { | 51 if (n == 3) { |
48 addr = (addr << 8) + octet; | 52 addr = (addr << 8) + octet; |
49 return htonl(addr); | 53 return htonl(addr); |
50 } | 54 } |
51 | 55 |
52 return INADDR_NONE; | 56 return INADDR_NONE; |