treat base 1 as an error in strtol-family functions
authorRich Felker <dalias@aerifal.cx>
Thu, 5 Jan 2017 00:48:21 +0000 (19:48 -0500)
committerRich Felker <dalias@aerifal.cx>
Thu, 5 Jan 2017 00:52:24 +0000 (19:52 -0500)
ISO C and POSIX only specify behavior for base arguments of 0 and
2-36; POSIX mandates an EINVAL error for unsupported bases. it's not
clear that there's a requirement for implementations not to "support"
additional bases as an extension, but "base 1" did not work in any
meaningful way anyway, so it should be considered unsupported and thus
an error.

src/internal/intscan.c

index 65d497ec8a6fbabe6dafe65983d79c2bb9b2abf1..a4a5ae861282863035a492ce8db0e18d4acfe3ac 100644 (file)
@@ -29,7 +29,7 @@ unsigned long long __intscan(FILE *f, unsigned base, int pok, unsigned long long
        int c, neg=0;
        unsigned x;
        unsigned long long y;
-       if (base > 36) {
+       if (base > 36 || base == 1) {
                errno = EINVAL;
                return 0;
        }