[Toybox] A couple of minor fixes

Rob Landley rob at landley.net
Sun Jun 5 12:17:24 PDT 2016


On 06/05/2016 01:34 PM, Paul Barker wrote:
> On Sun, 5 Jun 2016 12:41:43 -0500
> Rob Landley <rob at landley.net> wrote:
> 
>> On 06/05/2016 06:45 AM, Paul Barker wrote:
>>> * grep didn't print any output due to printf choking on a field
>>> width of INT_MAX/2.
>>
>> Wait, what? We cut it _down_ to INT_MAX/2 because glibc's printf
>> started choking on a field with of INT_MAX sometime after Ubuntu
>> 12.04 (where it worked just fine):
>>
>> commit 93e27d0d4723d57082463c4d70e6443060a8732b
>> Author: Rob Landley <rob at landley.net>
>> Date:   Wed Feb 10 16:23:31 2016 -0600
>>
>>     Although printf("%.*s", INT_MAX, s) works fine on ubuntu 12.04,
>>     it broke since.
>>
>> Now it can't handle the _smaller_ value? What libc version has this
>> new bug?
>>
> 
> I saw this in the git history and did start to wonder what keeps
> changing. I haven't really had much time to look into it though, I've
> just gone for a fix which never assumes that printf can handle a
> particular large field width.
> 
> OpenEmbedded master branch is currently using glibc 2.24 plus a bunch
> of patches. I'm building for a 32-bit system if that makes a difference.

Hmmm. It shouldn't, but not knowing what the bug is...?

This works on musl, uclibc, bionic, and older versions of glibc. That
pretty clearly pegs it as a glibc bug, and I'm reluctant to merge bug
workarounds for other packages.

I caved on the INT_MAX thing because it was a corner case, being
_that_close_ triggering an integer overflow was understandable, although
http://pubs.opengroup.org/onlinepubs/9699919799/functions/printf.html
says "A negative precision is taken as if the precision were omitted."
so even overflow of a signed value shouldn't screw stuff up here.
(Modulo stupid compiler "optimizations" breaking stuff.)

But if they can't handle INT_MAX/2, it sounds like they're violating
posix. That's a bug in glibc printf, not in my code. :(

> Thanks,
> Paul Barker

Rob



More information about the Toybox mailing list