# HG changeset patch # User Michael Pavone # Date 1606028140 28800 # Node ID 81eebbe6b2e32d8c6bc9fcfdcb96d7be53669513 # Parent 193b804c9845fe958a28bdf6a71dbfe483dada09 Fix some bugs in PNG decoder diff -r 193b804c9845 -r 81eebbe6b2e3 png.c --- 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;