|
Message-ID: <20170102020448.GW1555@brightrain.aerifal.cx> Date: Sun, 1 Jan 2017 21:04:48 -0500 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: Edge case: strtol with base==1 On Sun, Jan 01, 2017 at 04:45:19AM -0600, Ryan Prichard wrote: > Hi, > > I noticed that musl's strtol function allows a base of 1 by parsing strings > of only zeros. With all other bases less than 0 or greater than 36, strtol > fails and sets errno to EINVAL. > > Is this an oversight? > > Not that it especially *matters*, but my guess is that the behavior isn't > POSIX conforming: > - POSIX defines valid "subject sequences" for bases of 0 and 2-36. > - "In other than the C or POSIX locale, additional locale-specific subject > sequence forms may be accepted." > > In the C locale, musl is accepting a subject sequence of all zeroes, which > POSIX doesn't define for a base of 1. > > http://pubs.opengroup.org/onlinepubs/9699919799/functions/strtol.html Indeed, I think you're right. ISO C does not specify the behavior when the base is invalid (it's UB), but POSIX does impose an error requirement. It's not clear that it requires other bases to be unsupported, just that an error be produced if the base is unsupported, but I think the right behavior is not to support a nonsense "base 1". Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.