fix integer arithmetic in stbi__zexpand()
This commit is contained in:
parent
b09cb2c6f5
commit
29d639546d
11
stb_image.h
11
stb_image.h
@ -4130,13 +4130,16 @@ stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z)
|
|||||||
static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes
|
static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes
|
||||||
{
|
{
|
||||||
char *q;
|
char *q;
|
||||||
int cur, limit, old_limit;
|
unsigned int cur, limit, old_limit;
|
||||||
z->zout = zout;
|
z->zout = zout;
|
||||||
if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG");
|
if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG");
|
||||||
cur = (int) (z->zout - z->zout_start);
|
cur = (unsigned int) (z->zout - z->zout_start);
|
||||||
limit = old_limit = (int) (z->zout_end - z->zout_start);
|
limit = old_limit = (unsigned) (z->zout_end - z->zout_start);
|
||||||
while (cur + n > limit)
|
if(UINT_MAX - cur < n) return stbi__err("outofmem", "Out of memory");
|
||||||
|
while (cur + n > limit) {
|
||||||
|
if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory");
|
||||||
limit *= 2;
|
limit *= 2;
|
||||||
|
}
|
||||||
q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit);
|
q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit);
|
||||||
STBI_NOTUSED(old_limit);
|
STBI_NOTUSED(old_limit);
|
||||||
if (q == NULL) return stbi__err("outofmem", "Out of memory");
|
if (q == NULL) return stbi__err("outofmem", "Out of memory");
|
||||||
|
Loading…
Reference in New Issue
Block a user