[prev in list] [next in list] [prev in thread] [next in thread]
List: freetype-devel
Subject: Re: [ft-devel] freetype, undefined behaviour, and clang
From: Antoine Leca <Antoine-Freetype () Leca-Marti ! org>
Date: 2011-11-28 18:09:27
Message-ID: 4ED3CE57.6080106 () Leca-Marti ! org
[Download RAW message or body]
Sean McBride wrote:
Clang is an interesting tool to discover that sort of gotchas.
> 360 if ( (FT_ULong)(type->flags - FT_INT_MIN) > FT_UINT_MAX )
This one should really look like
if ( (FT_ULong)type->flags - FT_INT_MIN > FT_UINT_MAX )
according to ANSI C : since FT_INT_MIN has a lesser rank than FT_Ulong
(both because FT_Int has less rank than FT_Long and because signed
promotes to unsigned in ANSI C), in the latter form the - operation is
always done on unsigned values, so cannot overflow; the result is the
same as the former except for the overflow possibility.
Now, the purpose of such a test I am not sure I understand; if the
purpose is to detect any flag set outside the range of FT_Int, then
if ( type->flags > FT_INT_MAX )
should do the same work in a somewhat cleaner way, shouldn't it? And
then, the error message next line is a slight misfit:
"0x%x are dropped\n", (type->flags & ~((FT_ULong)FT_UINT_MAX))
(and there is another catch there, the format specifier should be %lx.)
And if the real intent is what the error message states, then
if ( type->flags > FT_UINT_MAX )
would do the job.
Again, clang is indeed an interesting tool... and it takes time to
analyse each and every warning.
Antoine
_______________________________________________
Freetype-devel mailing list
Freetype-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/freetype-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic