On Thu, 1 Dec 2022 at 00:34, Dean Rasheed <dean.a.rash...@gmail.com> wrote: > So something > like: > > // Accumulate positive value using unsigned int, with approximate > // overflow check. If acc >= 1 - INT_MIN / 10, then acc * 10 is > // sure to exceed -INT_MIN. > unsigned int cutoff = 1 - INT_MIN / 10; > unsigned int acc = 0; > > while (*ptr && isdigit((unsigned char) *ptr)) > { > if (unlikely(acc >= cutoff)) > goto out_of_range; > acc = acc * 10 + (*ptr - '0'); > ptr++; > } > > and similar for other bases, allowing the coding for all bases to be > kept similar.
Seems like a good idea to me. Couldn't the cutoff check just be "acc > INT_MAX / 10"? > I think it's probably best to consider this as a follow-on patch > though. It shouldn't delay getting the main feature committed. I agree that it should be a separate patch. But thinking about what Tom mentioned in [1], I had in mind this patch would need to wait until the new standard is out so that we have a more genuine reason for breaking existing queries. I've drafted up a full patch for improving the current base-10 code, so I'll go post that on another thread. David [1] https://postgr.es/m/3260805.1631106...@sss.pgh.pa.us