[Toybox] two bugs in od

hhm heehooman at gmail.com
Sun Sep 15 18:52:36 PDT 2013


For 1:, I meant that it should error, not work with zero-width unicode
joiner characters or something similar :-).

For 2:, yes, I meant -j.


On 9/15/13, Isaac <ibid.ag at gmail.com> wrote:
> On Sun, Sep 15, 2013 at 05:23:09AM -0400, hhm wrote:
>> Found 2 bugs in `od`, not very familiar with the code so just reporting
>> them:
>>
>>
>> 1. -t <integer-type>0 does not work correctly (loops infinitely while
>> printing 0)
>
> That's supposed to work at all?
> $ od -t x0 </bin/true
> od: invalid type string `x0';
> this system doesn't provide a 0-byte integral type
>
> Although it probably makes sense to disallow it rather than hoping
> that some user won't break things...
>
>> 2. -J does not seem to have an effect (although it looks like there is
>> some code which does reference/use it)
> I presume you mean '[-j #]' ?
> That appears to not have an effect; it should skip '#' bytes.
> And it's not documented in the help message...
> Hmm...
>   if (TT.jump_bytes < TT.pos) {
>     off_t off = lskip(fd, TT.jump_bytes);
>     if (off > 0) TT.pos += off;
>     if (TT.jump_bytes < TT.pos) return;
>   }
>
> Let's see what happens with -j 16, one small (8 byte) file:
> if (TT.jump_bytes < TT.pos)
> becomes
> if (16 < 0)
>
> Should be if (TT.jump_bytes > TT.pos).
>
> If we got past that, off becomes the filesize, so TT.pos is 8.
> if (TT.jump_bytes < TT.pos) return;
> becomes
> if (16 < 8) return;
> That is wrong. We should be returning if (16 > 8).
>
> Of course, TT.pos appears to need reinitializing to 0 before this...
>
> But the obvious patch doesn't work.
> (inserts fprintf)
> And it appears that off is 0. So lskip is returning 0:
>
>   if (and != -1 && offset >= lseek(fd, offset, SEEK_END)
>     && offset+and == lseek(fd, offset+and, SEEK_SET)) return 0;
> And the other path returns 0:
> while (offset) {
> //read loop, which decrements offset by bytes read
> }
> return offset;
>
> I'm not sure how to fix this mess.  Should lskip return bytes left to fill
> the request (0 if success), or bytes advanced?
>
>
> HTH,
> Isaac Dunham
>

 1379296356.0


More information about the Toybox mailing list