diff options
author | millert <> | 2017-07-06 16:23:11 +0000 |
---|---|---|
committer | millert <> | 2017-07-06 16:23:11 +0000 |
commit | a21f0c405df345f9ac6e331f71f09db8e340ca31 (patch) | |
tree | 26f60c0a26bc547b49545722cdc2d4a6192d7562 /src/lib/libc/stdlib/strtol.c | |
parent | 22e44168d1f1914a6642ee8c247b8ed5cc2fe51e (diff) | |
download | openbsd-a21f0c405df345f9ac6e331f71f09db8e340ca31.tar.gz openbsd-a21f0c405df345f9ac6e331f71f09db8e340ca31.tar.bz2 openbsd-a21f0c405df345f9ac6e331f71f09db8e340ca31.zip |
The 0x (or 0X) prefix in base 16 is optional so only skip over the
prefix if the character following it is a valid hex char. The C99
standard is clear that given the string "0xy" zero should be returned
and endptr set to point to the "x". OK deraadt@ espie@
Diffstat (limited to 'src/lib/libc/stdlib/strtol.c')
-rw-r--r-- | src/lib/libc/stdlib/strtol.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib/libc/stdlib/strtol.c b/src/lib/libc/stdlib/strtol.c index 49465e28ee..599d2355a8 100644 --- a/src/lib/libc/stdlib/strtol.c +++ b/src/lib/libc/stdlib/strtol.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: strtol.c,v 1.11 2015/09/13 08:31:48 guenther Exp $ */ | 1 | /* $OpenBSD: strtol.c,v 1.12 2017/07/06 16:23:11 millert Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 1990 The Regents of the University of California. | 3 | * Copyright (c) 1990 The Regents of the University of California. |
4 | * All rights reserved. | 4 | * All rights reserved. |
@@ -75,8 +75,8 @@ strtol(const char *nptr, char **endptr, int base) | |||
75 | if (c == '+') | 75 | if (c == '+') |
76 | c = *s++; | 76 | c = *s++; |
77 | } | 77 | } |
78 | if ((base == 0 || base == 16) && | 78 | if ((base == 0 || base == 16) && c == '0' && |
79 | c == '0' && (*s == 'x' || *s == 'X')) { | 79 | (*s == 'x' || *s == 'X') && isxdigit((unsigned char)s[1])) { |
80 | c = s[1]; | 80 | c = s[1]; |
81 | s += 2; | 81 | s += 2; |
82 | base = 16; | 82 | base = 16; |