mirror of
https://sourceware.org/git/glibc.git
synced 2025-05-01 12:04:52 +03:00
(inet_network): Synch with bind 8.2.2.
This commit is contained in:
parent
8a94dfe44e
commit
613444ea7c
@ -48,28 +48,35 @@ inet_network(cp)
|
|||||||
register u_int32_t val, base, n, i;
|
register u_int32_t val, base, n, i;
|
||||||
register char c;
|
register char c;
|
||||||
u_int32_t parts[4], *pp = parts;
|
u_int32_t parts[4], *pp = parts;
|
||||||
|
int digit;
|
||||||
|
|
||||||
again:
|
again:
|
||||||
val = 0; base = 10;
|
val = 0; base = 10; digit = 0;
|
||||||
if (*cp == '0')
|
if (*cp == '0')
|
||||||
base = 8, cp++;
|
digit = 1, base = 8, cp++;
|
||||||
if (*cp == 'x' || *cp == 'X')
|
if (*cp == 'x' || *cp == 'X')
|
||||||
base = 16, cp++;
|
base = 16, cp++;
|
||||||
while ((c = *cp)) {
|
while ((c = *cp) != 0) {
|
||||||
if (isdigit(c)) {
|
if (isdigit(c)) {
|
||||||
|
if (base == 8 && (c == '8' || c == '9'))
|
||||||
|
return (INADDR_NONE);
|
||||||
val = (val * base) + (c - '0');
|
val = (val * base) + (c - '0');
|
||||||
cp++;
|
cp++;
|
||||||
|
digit = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (base == 16 && isxdigit(c)) {
|
if (base == 16 && isxdigit(c)) {
|
||||||
val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A'));
|
val = (val << 4) + (c + 10 - (islower(c) ? 'a' : 'A'));
|
||||||
cp++;
|
cp++;
|
||||||
|
digit = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (!digit)
|
||||||
|
return (INADDR_NONE);
|
||||||
if (*cp == '.') {
|
if (*cp == '.') {
|
||||||
if (pp >= parts + 4)
|
if (pp >= parts + 4 || val > 0xff)
|
||||||
return (INADDR_NONE);
|
return (INADDR_NONE);
|
||||||
*pp++ = val, cp++;
|
*pp++ = val, cp++;
|
||||||
goto again;
|
goto again;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user