diff options
| author | TazyFoundSoup <gardendistrict0x0@outlook.com> | 2026-04-14 11:09:33 +1000 |
|---|---|---|
| committer | TazyFoundSoup <gardendistrict0x0@outlook.com> | 2026-04-14 11:09:33 +1000 |
| commit | 2c526ed41bf81a3c7e0438661fd87d2480221f34 (patch) | |
| tree | 521631e222854dd7f1613844b7205a81b5060c48 /src/format/image/png.c | |
| parent | 097ad322e0cbe5ca72a3d7c1938f2925547c196b (diff) | |
fix(png): IDAT uncompressed size and zlib header skip
Diffstat (limited to 'src/format/image/png.c')
| -rw-r--r-- | src/format/image/png.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/format/image/png.c b/src/format/image/png.c index c5dcb4d..1004b2a 100644 --- a/src/format/image/png.c +++ b/src/format/image/png.c @@ -242,7 +242,7 @@ ff_result ff_png_data_handler(ff_ctx* ctx, uint8_t *buf, size_t len, ff_png_ctx // Getting the size is weird cause it could the sample count // could be different based on color type and bit depth - size_t uncompressed_size = png_ctx->width * png_ctx->height * ff_png_bpp(png_ctx); + size_t uncompressed_size = png_ctx->height * (1 + png_ctx->width * ff_png_bpp(png_ctx)); uncompressed_data = ctx->allocator.ff_alloc(uncompressed_size); @@ -254,7 +254,7 @@ ff_result ff_png_data_handler(ff_ctx* ctx, uint8_t *buf, size_t len, ff_png_ctx } unsigned int out_size = (unsigned int)uncompressed_size; - if (tinf_uncompress(uncompressed_data, &out_size, buf, len) != TINF_OK) { + if (tinf_uncompress(uncompressed_data, &out_size, buf + 2, len - 2) != TINF_OK) { ff_dprintf(ctx, "png: failed to uncompress IDAT data\n"); ctx->allocator.ff_free(uncompressed_data); @@ -436,3 +436,6 @@ ff_result ff_png_trans_handler(ff_ctx* ctx, uint8_t *buf, size_t len, ff_png_ctx return FF_RESULT_WARN_NO_IMPL; } + + +// TODO: Add ff_close_png
\ No newline at end of file |
