Undefined behaviour causing problems on AVR32

Bradley Smith bradsmith at debian.org
Mon Apr 13 16:37:28 CEST 2009


On Mon, 13 Apr 2009 16:11:42 +0200
Torbjorn Granlund <tg at gmplib.org> wrote:

> Bradley Smith <bradsmith at debian.org> writes:
> 
>   On Mon, 13 Apr 2009 14:02:20 +0200
>   Torbjorn Granlund <tg at gmplib.org> wrote:
>   
>   > I agree this is broken in GMP.
>   > 
>   > I don't fully understand the GMP scanf code.
>   > 
>   > I find two calls to sscanffuns.c's scan through the ->scan field,
>   > both from __gmp_doscan.  One call uses 3 parameters and the other
>   > uses 4 parameters.
>   > 
>   > Both the current and your suggested code assumes there are 4
>   > parameters. While your code is an improvement, it still looks
>   > undefined to me.
>   > 
>   > Do you agree?
>   
>   Hmm, yes I didn't spot the call that uses 3 args, I guess a simple way
> to fix that would be to change the call that uses 3 args to use 4, by
> just putting a dummy argument as the 4th. Maybe not the nicest fix, but
> I can't really see an alternative that doesn't involve rewriting large
> chunks of the code.
>   
> Unfortunately, that might not work either, since the ->scan field might
> point at fscanf.  (I tried this and got crashes...)
> 
> I'll try your initial solution to see if it works in practice.

Come to think of it, you could do something like the following:

static int
scan (const char **sp, const char *fmt, ...)
{
    va_list ap;
    int ret;

    va_start(ap, fmt);
    ret = vsscanf(*sp, fmt, ap);
    va_end(ap);

    return ret;
}

Which should be perfectly well defined as long as the number of fields in
fmt is the same as the number or arguments pass, which I hope should be
safe to assume, otherwise things would be breaking all over the place.

Regards,
Bradley Smith

-- 
Bradley Smith                                     brad at brad-smith.co.uk
Debian GNU/Linux Developer                         bradsmith at debian.org
GPG: 0xC718D347       D201 7274 2FE1 A92A C45C EFAB 8F70 629A C718 D347
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 197 bytes
Desc: not available
URL: <http://gmplib.org/list-archives/gmp-bugs/attachments/20090413/603cdf4d/attachment.bin>


More information about the gmp-bugs mailing list