comparison src/core/ngx_inet.c @ 4573:98a2518a98dc

In ngx_ptocidr(), check that the supplied prefix length is within the allowed range.
author Ruslan Ermilov <ru@nginx.com>
date Tue, 03 Apr 2012 08:22:00 +0000
parents 67653855682e
children a8881886a5f7
comparison
equal deleted inserted replaced
4572:67653855682e 4573:98a2518a98dc
405 405
406 switch (cidr->family) { 406 switch (cidr->family) {
407 407
408 #if (NGX_HAVE_INET6) 408 #if (NGX_HAVE_INET6)
409 case AF_INET6: 409 case AF_INET6:
410 if (shift > 128) {
411 return NGX_ERROR;
412 }
413
410 addr = cidr->u.in6.addr.s6_addr; 414 addr = cidr->u.in6.addr.s6_addr;
411 mask = cidr->u.in6.mask.s6_addr; 415 mask = cidr->u.in6.mask.s6_addr;
412 rc = NGX_OK; 416 rc = NGX_OK;
413 417
414 for (i = 0; i < 16; i++) { 418 for (i = 0; i < 16; i++) {
426 430
427 return rc; 431 return rc;
428 #endif 432 #endif
429 433
430 default: /* AF_INET */ 434 default: /* AF_INET */
435 if (shift > 32) {
436 return NGX_ERROR;
437 }
431 438
432 if (shift) { 439 if (shift) {
433 cidr->u.in.mask = htonl((ngx_uint_t) (0 - (1 << (32 - shift)))); 440 cidr->u.in.mask = htonl((ngx_uint_t) (0 - (1 << (32 - shift))));
434 441
435 } else { 442 } else {