On 26/10/2026 03:45, Collin Funk wrote:
Currently, the following occurs:

     $ od -v -t x1 -j $((INTMAX_MAX - 1))  /dev/zero
     777777777777777777776 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
     Segmentation fault         (core dumped) od -v -t x1 -j $((INTMAX_MAX - 
1)) /dev/zero

This is because the signed integer overflows, becoming negative, before
being used in format_address_std to create a printable string.

The bug was "introduced" by commit 35d9bf691 (od: prefer idx_t to
size_t, 2025-06-24), but the previous behavior would still be a bit
wonky. That is, the offset would eventually overflow, but since it was
unsigned, it would wrap around and start printing from address zero
again.

For that reason, I marked the specific instance invocation as a bug, but
mentioned the general improvement as well. I'm not 100% sure that is the
best way to document it, though.
The fix looks good.
I'd have a single bug fix entry in NEWS along the lines of:

  od now exits gracefully when offsets overflow integer limits.
  [This bug was present in "the beginning".]

While thinking about this, some ideas for potential further changes in this 
area,
probably not be worth doing due to the practicality of hitting these limits:

- Double the supported offset range using unsigned.
- Decouple -N and -j handling.
- Avoid offset calculations with -An.
- Allow offset wrap, with a diagnostic to stderr.

thanks,
Padraig

Reply via email to