summaryrefslogtreecommitdiff
path: root/src/format/image/png.c
diff options
context:
space:
mode:
authorTazyFoundSoup <gardendistrict0x0@outlook.com>2026-04-14 11:09:33 +1000
committerTazyFoundSoup <gardendistrict0x0@outlook.com>2026-04-14 11:09:33 +1000
commit2c526ed41bf81a3c7e0438661fd87d2480221f34 (patch)
tree521631e222854dd7f1613844b7205a81b5060c48 /src/format/image/png.c
parent097ad322e0cbe5ca72a3d7c1938f2925547c196b (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.c7
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