From: cristy Date: Fri, 3 Feb 2012 16:39:53 +0000 (+0000) Subject: (no commit message) X-Git-Tag: 7.0.1-0~6268 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4a8b017d7894a320cbaa2132dfe4cc28c814e52d;p=imagemagick --- diff --git a/MagickCore/property.c b/MagickCore/property.c index 5d1dc77f6..4d7141bc1 100644 --- a/MagickCore/property.c +++ b/MagickCore/property.c @@ -463,6 +463,13 @@ static inline ssize_t MagickMax(const ssize_t x,const ssize_t y) return(y); } +static inline ssize_t MagickMin(const ssize_t x,const ssize_t y) +{ + if (x < y) + return(x); + return(y); +} + static inline int ReadPropertyByte(const unsigned char **p,size_t *length) { int @@ -598,7 +605,7 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key, continue; if (ReadPropertyByte(&info,&length) != (unsigned char) 'M') continue; - id=(ssize_t) ReadPropertyMSBShort(&info,&length); + id=(ssize_t) ((int) ReadPropertyMSBShort(&info,&length)); if (id < (ssize_t) start) continue; if (id > (ssize_t) stop) @@ -629,7 +636,7 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key, No name match, scroll forward and try next. */ info+=count; - length-=count; + length-=MagickMin(count,(ssize_t) length); continue; } if ((*name == '#') && (sub_number != 1)) @@ -639,7 +646,7 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key, */ sub_number--; info+=count; - length-=count; + length-=MagickMin(count,(ssize_t) length); continue; } /* @@ -654,7 +661,7 @@ static MagickBooleanType Get8BIMProperty(const Image *image,const char *key, (void) CopyMagickMemory(attribute,(char *) info,(size_t) count); attribute[count]='\0'; info+=count; - length-=count; + length-=MagickMin(count,(ssize_t) length); if ((id <= 1999) || (id >= 2999)) (void) SetImageProperty((Image *) image,key,(const char *) attribute,exception); @@ -1275,7 +1282,7 @@ static MagickBooleanType GetEXIFProperty(const Image *image, /* Determine how many entries there are in the current IFD. */ - number_entries=ReadPropertyShort(endian,directory); + number_entries=(size_t) ((int) ReadPropertyShort(endian,directory)); for ( ; entry < number_entries; entry++) { register unsigned char @@ -1346,7 +1353,7 @@ static MagickBooleanType GetEXIFProperty(const Image *image, case EXIF_FMT_ULONG: { EXIFMultipleValues(4,"%.20g",(double) - ReadPropertyLong(endian,p1)); + ((int) ReadPropertyLong(endian,p1))); break; } case EXIF_FMT_SLONG: @@ -1460,8 +1467,7 @@ static MagickBooleanType GetEXIFProperty(const Image *image, } } if ((tag_value == TAG_EXIF_OFFSET) || - (tag_value == TAG_INTEROP_OFFSET) || - (tag_value == TAG_GPS_OFFSET)) + (tag_value == TAG_INTEROP_OFFSET) || (tag_value == TAG_GPS_OFFSET)) { size_t offset; @@ -1484,8 +1490,8 @@ static MagickBooleanType GetEXIFProperty(const Image *image, level++; if ((directory+2+(12*number_entries)) > (exif+length)) break; - offset=(size_t) ReadPropertyLong(endian,directory+2+(12* - number_entries)); + offset=(size_t) ((int) ReadPropertyLong(endian,directory+2+(12* + number_entries))); if ((offset != 0) && (offset < length) && (level < (MaxDirectoryStack-2))) { @@ -1639,7 +1645,7 @@ static char *TracePSClippath(const unsigned char *blob,size_t length, in_subpath=MagickFalse; while (length > 0) { - selector=(ssize_t) ReadPropertyMSBShort(&blob,&length); + selector=(ssize_t) ((int) ReadPropertyMSBShort(&blob,&length)); switch (selector) { case 0: @@ -1648,15 +1654,15 @@ static char *TracePSClippath(const unsigned char *blob,size_t length, if (knot_count != 0) { blob+=24; - length-=24; + length-=MagickMin(24,(ssize_t) length); break; } /* Expected subpath length record. */ - knot_count=(ssize_t) ReadPropertyMSBShort(&blob,&length); + knot_count=(ssize_t) ((int) ReadPropertyMSBShort(&blob,&length)); blob+=22; - length-=22; + length-=MagickMin(22,(ssize_t) length); break; } case 1: @@ -1670,7 +1676,7 @@ static char *TracePSClippath(const unsigned char *blob,size_t length, Unexpected subpath knot */ blob+=24; - length-=24; + length-=MagickMin(24,(ssize_t) length); break; } /* @@ -1682,8 +1688,8 @@ static char *TracePSClippath(const unsigned char *blob,size_t length, xx, yy; - yy=ReadPropertyMSBLong(&blob,&length); - xx=ReadPropertyMSBLong(&blob,&length); + yy=(size_t) ((int) ReadPropertyMSBLong(&blob,&length)); + xx=(size_t) ((int) ReadPropertyMSBLong(&blob,&length)); x=(ssize_t) xx; if (xx > 2147483647) x=(ssize_t) xx-4294967295U-1; @@ -1771,7 +1777,7 @@ static char *TracePSClippath(const unsigned char *blob,size_t length, default: { blob+=24; - length-=24; + length-=MagickMin(24,(ssize_t) length); break; } } @@ -1836,7 +1842,7 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length, in_subpath=MagickFalse; while (length != 0) { - selector=(ssize_t) ReadPropertyMSBShort(&blob,&length); + selector=(ssize_t) ((int) ReadPropertyMSBShort(&blob,&length)); switch (selector) { case 0: @@ -1845,15 +1851,15 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length, if (knot_count != 0) { blob+=24; - length-=24; + length-=MagickMin(24,(ssize_t) length); break; } /* Expected subpath length record. */ - knot_count=(ssize_t) ReadPropertyMSBShort(&blob,&length); + knot_count=(ssize_t) ((int) ReadPropertyMSBShort(&blob,&length)); blob+=22; - length-=22; + length-=MagickMin(22,(ssize_t) length); break; } case 1: @@ -1867,7 +1873,7 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length, Unexpected subpath knot. */ blob+=24; - length-=24; + length-=MagickMin(24,(ssize_t) length); break; } /* @@ -1879,8 +1885,8 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length, xx, yy; - yy=ReadPropertyMSBLong(&blob,&length); - xx=ReadPropertyMSBLong(&blob,&length); + yy=(size_t) ((int) ReadPropertyMSBLong(&blob,&length)); + xx=(size_t) ((int) ReadPropertyMSBLong(&blob,&length)); x=(ssize_t) xx; if (xx > 2147483647) x=(ssize_t) xx-4294967295U-1; @@ -1942,7 +1948,7 @@ static char *TraceSVGClippath(const unsigned char *blob,size_t length, default: { blob+=24; - length-=24; + length-=MagickMin(24,(ssize_t) length); break; } }