Re: avoid atoi, when possible; int overflow -> heap corruption
- From
Jim Meyering <jim@meyering.net>
- Date
- May 22, 2006, 13:31 UTC
- Message-ID
- <878xoufaof.fsf@rho.meyering.net>
- In-Reply-To
- <118833cc0605220616t75a182b1oa404d5efe8a1f5d9@mail.gmail.com>
"Morten Welinder" <mwelinder@gmail.com> wrote:
Show 8 quoted lines
>> There are about 20 uses of atoi, and most calls can return >> a usable result in spite of an invalid input -- just because >> atoi returns the same thing for "99" as "99-and-any-suffix". >> It would be better not to ignore invalid inputs. > > atoi has undefined behaviour for "99-and-any-suffix". You might > get lucky and get back 99, but you might also get a random value > or a core dump.
I've never heard of that. POSIX says that atoi(str) is equivalent to:
(int) strtol(str, (char **)NULL, 10)
except that the handling of errors may differ.
If the value cannot be represented, the behavior is undefined.Since strtol works fine with such a suffix, and since 99 can be represented, I don't see why there would be any undefined behavior.
Do you know of an implementation for which `atoi ("99-and-any-suffix")' does anything other than return 99?