I wrote:
It makes more sense to check for ridiculous-sized numbers before parsing them and just output a min/max value depending on sign. (Or right-truncate e.g. n*12 digits and add n*5 to the length.)
Committed. Chopping n*7 digits and adding n*3 to the binary-integer length instead. More wasteful of the exponent bits, but leaves fewer digits to parse.
Could possibly chop just as many digits as needed and compute the length more exactly, but I wasn't up to figuring out what algorithm to use so an exponent taken from the parsed digits could add to overlap an exponent taken from chopping. Will fiddle a bit with it now and see if I come up with something.
One detail: Looks like lutil_str2bin() could use a ctx parameter, for the temporary malloc/free in that function.