Mercurial > repos > blastem
diff png.c @ 2019:81eebbe6b2e3
Fix some bugs in PNG decoder
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 21 Nov 2020 22:55:40 -0800 |
parents | 31effaadf877 |
children | eb45ad9d8a3f |
line wrap: on
line diff
--- a/png.c Mon Nov 09 00:29:47 2020 -0800 +++ b/png.c Sat Nov 21 22:55:40 2020 -0800 @@ -204,7 +204,7 @@ static uint32_t pixel_gray(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) { - uint8_t value = filter(*cur, *last, bpp, x); + uint8_t value = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; @@ -214,17 +214,17 @@ static uint32_t pixel_true(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) { - uint8_t red = filter(*cur, *last, bpp, x); + uint8_t red = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; } - uint8_t green = filter(*cur, *last, bpp, x); + uint8_t green = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; } - uint8_t blue = filter(*cur, *last, bpp, x); + uint8_t blue = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; @@ -234,12 +234,12 @@ static uint32_t pixel_gray_alpha(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) { - uint8_t value = filter(*cur, *last, bpp, x); + uint8_t value = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; } - uint8_t alpha = filter(*cur, *last, bpp, x); + uint8_t alpha = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; @@ -249,22 +249,22 @@ static uint32_t pixel_true_alpha(uint8_t **cur, uint8_t **last, uint8_t bpp, uint32_t x, filter_fun filter) { - uint8_t red = filter(*cur, *last, bpp, x); + uint8_t red = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; } - uint8_t green = filter(*cur, *last, bpp, x); + uint8_t green = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; } - uint8_t blue = filter(*cur, *last, bpp, x); + uint8_t blue = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; } - uint8_t alpha = filter(*cur, *last, bpp, x); + uint8_t alpha = **cur = filter(*cur, *last, bpp, x); (*cur)++; if (*last) { (*last)++; @@ -354,6 +354,7 @@ } memcpy(idat_buf + idat_size, buffer + cur, chunk_size); idat_size += chunk_size; + idat_needs_free = 1; } else { idat_buf = buffer + cur; idat_size = chunk_size;