|
|
|
@ -4072,7 +4072,7 @@ static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) |
|
|
|
|
for (s=STBI__ZFAST_BITS+1; ; ++s) |
|
|
|
|
if (k < z->maxcode[s]) |
|
|
|
|
break; |
|
|
|
|
if (s == 16) return -1; // invalid code!
|
|
|
|
|
if (s >= 16) return -1; // invalid code!
|
|
|
|
|
// code size is s, so:
|
|
|
|
|
b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; |
|
|
|
|
STBI_ASSERT(z->size[b] == s); |
|
|
|
@ -5060,10 +5060,12 @@ static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, st |
|
|
|
|
void *result=NULL; |
|
|
|
|
if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); |
|
|
|
|
if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { |
|
|
|
|
if (p->depth < 8) |
|
|
|
|
if (p->depth <= 8) |
|
|
|
|
ri->bits_per_channel = 8; |
|
|
|
|
else if (p->depth == 16) |
|
|
|
|
ri->bits_per_channel = 16; |
|
|
|
|
else |
|
|
|
|
ri->bits_per_channel = p->depth; |
|
|
|
|
return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); |
|
|
|
|
result = p->out; |
|
|
|
|
p->out = NULL; |
|
|
|
|
if (req_comp && req_comp != p->s->img_out_n) { |
|
|
|
@ -5224,6 +5226,8 @@ static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) |
|
|
|
|
info->mr = info->mg = info->mb = info->ma = 0; |
|
|
|
|
info->extra_read = 14; |
|
|
|
|
|
|
|
|
|
if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); |
|
|
|
|
|
|
|
|
|
if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); |
|
|
|
|
if (hsz == 12) { |
|
|
|
|
s->img_x = stbi__get16le(s); |
|
|
|
@ -5424,6 +5428,7 @@ static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req |
|
|
|
|
gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); |
|
|
|
|
bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); |
|
|
|
|
ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); |
|
|
|
|
if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } |
|
|
|
|
} |
|
|
|
|
for (j=0; j < (int) s->img_y; ++j) { |
|
|
|
|
if (easy) { |
|
|
|
@ -5687,6 +5692,11 @@ static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req |
|
|
|
|
// do I need to load a palette?
|
|
|
|
|
if ( tga_indexed) |
|
|
|
|
{ |
|
|
|
|
if (tga_palette_len == 0) { /* you have to have at least one entry! */ |
|
|
|
|
STBI_FREE(tga_data); |
|
|
|
|
return stbi__errpuc("bad palette", "Corrupt TGA"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// any data to skip? (offset usually = 0)
|
|
|
|
|
stbi__skip(s, tga_palette_start ); |
|
|
|
|
// load the palette
|
|
|
|
|