https://bugzilla.kernel.org/show_bug.cgi?id=61511 Jon Harper <jon.harper87@xxxxxxxxx> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jon.harper87@xxxxxxxxx --- Comment #3 from Jon Harper <jon.harper87@xxxxxxxxx> --- strtod(3) has the following note: NOTES Since 0 can legitimately be returned on both success and failure, the calling program should set errno to 0 before the call, and then determine if an error occurred by checking whether errno has a nonzero value after the call. Maybe add the same note to scanf(3) ? Also, the example program from scanf(3) is: char *p; int n; errno = 0; n = scanf("%m[a-z]", &p); if (n == 1) { printf("read: %s\n", p); free(p); } else if (errno != 0) { perror("scanf"); } else { fprintf(stderr, "No matching characters\n"); } which suggests checking for the return value of scanf before checking for errno, which is wrong in the integer overflow case as scanf returns 1. Change the order of the checks ? Also, for scanf, it doesn't set i to a constant value (adapting the example program to read an int): jon@zog:~$ cat dez.c #include "stdlib.h" #include "stdio.h" #include "errno.h" int main() { int res; int n; errno = 0; n = scanf("%d", &res); if (n == 1) { printf("read: %d\n", res); } else if (errno != 0) { perror("scanf"); } else { fprintf(stderr, "No matching characters\n"); } } jon@zog:~$ for ((i=0; i<30; i++)); do echo "$((10**i -1))" | ./dez; done read: 0 read: 9 read: 99 read: 999 read: 9999 read: 99999 read: 999999 read: 9999999 read: 99999999 read: 999999999 read: 1410065407 read: 1215752191 read: -727379969 read: 1316134911 read: 276447231 read: -1530494977 read: 1874919423 read: 1569325055 read: -1486618625 read: -1981284353 read: 1661992959 read: -559939585 read: -1304428545 read: -159383553 read: -1593835521 read: 1241513983 read: -469762049 read: -402653185 read: 268435455 read: -1610612737 -- You are receiving this mail because: You are watching the assignee of the bug. -- To unsubscribe from this list: send the line "unsubscribe linux-man" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html