|
Message-ID: <20221218110320.5e3979a4.quinq@fifth.space> Date: Sun, 18 Dec 2022 11:06:14 +0100 From: Quentin Rameau <quinq@...th.space> To: musl@...ts.openwall.com Subject: Re: Bug in atoll strtoll, the output of then differ > Hello ! Hi, > Doing some work with emscripten with this project > https://github.com/mingodad/CG-SQL-Lua-playground I was getting some > errors with the usage of "atoll" and with this small program to compare > the output of "musl" and "glibc" I found what seems to be a bug in > "atoll" because with "musl" it gives a different output than "strtoll". > > ===== > > #include <stdio.h> > #include <stdlib.h> > > int main(int argc, char *argv[]) > { > const char *s = "9223372036854775808"; > long long ll = atoll(s); > long long ll2 = strtoll (s, (char **) NULL, 10); > int imax = 0x7fffffff; > printf("%s : %lld : %lld : %d : %d\n", s, ll, ll2, imax, ll <= imax); > return 0; > } This is not a bug in musl, but a bug in the code, 9223372036854775808 is outside the range of long long, so the behavior is undefined. As recommended by the standard, ato* should only be used if the input is known to always be in the target range, otherwise use the strto* functins and do proper error handling.
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.