[PATCH] exif warning fix?

php.internals

Joe Orton

21 years ago
Testing "length >= LONG_MAX" where length is an int is always false, and gcc gives a warning for it. Perhaps something like this was intended? Index: ext/exif/exif.c =================================================================== RCS file: /repository/php-src/ext/exif/exif.c,v retrieving revision 1.170 diff -u -r1.170 exif.c --- ext/exif/exif.c 2 Mar 2005 18:21:45 -0000 1.170 +++ ext/exif/exif.c 10 Mar 2005 10:15:31 -0000 @@ -1557,7 +1557,7 @@ image_info_data *info_data; image_info_data *list; - if (length >= LONG_MAX) { + if ((unsigned int)length >= INT_MAX) { return; }

Ard Biesheuvel

21 years ago
Joe Orton wrote:
> Testing "length >= LONG_MAX" where length is an int is always false, and > gcc gives a warning for it. Perhaps something like this was intended? >
On 64-bit it is always false, however on 32-bit 'length == LONG_MAX' can be true. That's probably why noone caught the warning so far, as gcc would not emit it on a 32-bit system. If you're testing for overflow, casting to unsigned int won't help you here, as the overflow will already have occurred when length was assigned its value.
-- Ard

Joe Orton

21 years ago
On Thu, Mar 10, 2005 at 11:23:51AM +0100, Ard Biesheuvel wrote:
> Joe Orton wrote: > >Testing "length >= LONG_MAX" where length is an int is always false, and > >gcc gives a warning for it. Perhaps something like this was intended? > > > > On 64-bit it is always false, however on 32-bit 'length == LONG_MAX' can > be true. That's probably why noone caught the warning so far, as gcc > would not emit it on a 32-bit system. > > If you're testing for overflow, casting to unsigned int won't help you > here, as the overflow will already have occurred when length was > assigned its value.
Yes, sorry, I haven't turned my brain on yet this morning. So perhaps a test for (length < 0) is all that's really needed; I can't see why length == INT_MAX is particularly a special case here... joe