|
|
@ -1072,8 +1072,8 @@ static int stbi__addints_valid(int a, int b) |
|
|
|
return a <= INT_MAX - b; |
|
|
|
return a <= INT_MAX - b; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// returns 1 if the product of two signed shorts is valid, 0 on overflow.
|
|
|
|
// returns 1 if the product of two ints fits in a signed short, 0 on overflow.
|
|
|
|
static int stbi__mul2shorts_valid(short a, short b) |
|
|
|
static int stbi__mul2shorts_valid(int a, int b) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow
|
|
|
|
if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow
|
|
|
|
if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid
|
|
|
|
if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid
|
|
|
@ -3384,13 +3384,13 @@ static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) |
|
|
|
return 1; |
|
|
|
return 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static int stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) |
|
|
|
static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// some JPEGs have junk at end, skip over it but if we find what looks
|
|
|
|
// some JPEGs have junk at end, skip over it but if we find what looks
|
|
|
|
// like a valid marker, resume there
|
|
|
|
// like a valid marker, resume there
|
|
|
|
while (!stbi__at_eof(j->s)) { |
|
|
|
while (!stbi__at_eof(j->s)) { |
|
|
|
int x = stbi__get8(j->s); |
|
|
|
stbi_uc x = stbi__get8(j->s); |
|
|
|
while (x == 255) { // might be a marker
|
|
|
|
while (x == 0xff) { // might be a marker
|
|
|
|
if (stbi__at_eof(j->s)) return STBI__MARKER_none; |
|
|
|
if (stbi__at_eof(j->s)) return STBI__MARKER_none; |
|
|
|
x = stbi__get8(j->s); |
|
|
|
x = stbi__get8(j->s); |
|
|
|
if (x != 0x00 && x != 0xff) { |
|
|
|
if (x != 0x00 && x != 0xff) { |
|
|
|