Hi Branden, I see some code calling strtol(3) that I suspect won't behave well in some systems:
$ grepc -tfd check_integer_arg . ./src/utils/indxbib/indxbib.cpp:static void check_integer_arg(char opt, const char *arg, int min, int *res) { char *ptr; long n = strtol(arg, &ptr, 10); if (n == 0 && ptr == arg) error("argument to -%1 not an integer", opt); else if (n < min) error("argument to -%1 must not be less than %2", opt, min); else { if (n > INT_MAX) error("argument to -%1 greater than maximum integer", opt); else if (*ptr != '\0') error("junk after integer argument to -%1", opt); *res = int(n); } } I think these tests miss some corner cases: - If INT_MAX==LONG_MAX, then n>INT_MAX is impossible, but strtol(3) will return LONG_MAX and errno ERANGE for values greater than that. groff is silently accepting input >LONG_MAX in those systems, and silently saturating it to LONG_MAX (INT_MAX). - If min==INT_MIN==LONG_MIN, then a similar thing happens for underflow. Cheers, Alex -- <https://www.alejandro-colomar.es/> Looking for a remote C programming job at the moment.
signature.asc
Description: PGP signature