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;