Mercurial > hg > nginx-quic
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 { |