From a68441bca195e3ece2ea6d248c1755c82ec44b2b Mon Sep 17 00:00:00 2001 From: Curtis McEnroe Date: Sun, 2 Sep 2018 22:03:31 -0400 Subject: malloc IDAT chunks in pngo and glitch --- bin/glitch.c | 10 +++++++--- bin/pngo.c | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/bin/glitch.c b/bin/glitch.c index 1faf25f6..60a4ff7c 100644 --- a/bin/glitch.c +++ b/bin/glitch.c @@ -209,13 +209,17 @@ static void readData(void) { for (;;) { struct Chunk chunk = readChunk(); if (0 == memcmp(chunk.type, "IDAT", 4)) { - uint8_t idat[chunk.size]; - readExpect(idat, sizeof(idat), "image data"); + uint8_t *idat = malloc(chunk.size); + if (!idat) err(EX_OSERR, "malloc"); + + readExpect(idat, chunk.size, "image data"); readCrc(); stream.next_in = idat; - stream.avail_in = sizeof(idat); + stream.avail_in = chunk.size; int error = inflate(&stream, Z_SYNC_FLUSH); + free(idat); + if (error == Z_STREAM_END) break; if (error != Z_OK) errx(EX_DATAERR, "%s: inflate: %s", path, stream.msg); diff --git a/bin/pngo.c b/bin/pngo.c index a6d036c3..d56b0fa6 100644 --- a/bin/pngo.c +++ b/bin/pngo.c @@ -300,13 +300,17 @@ static void readData(void) { for (;;) { struct Chunk chunk = readChunk(); if (0 == memcmp(chunk.type, "IDAT", 4)) { - uint8_t idat[chunk.size]; - readExpect(idat, sizeof(idat), "image data"); + uint8_t *idat = malloc(chunk.size); + if (!idat) err(EX_OSERR, "malloc"); + + readExpect(idat, chunk.size, "image data"); readCrc(); stream.next_in = idat; - stream.avail_in = sizeof(idat); + stream.avail_in = chunk.size; int error = inflate(&stream, Z_SYNC_FLUSH); + free(idat); + if (error == Z_STREAM_END) break; if (error != Z_OK) errx(EX_DATAERR, "%s: inflate: %s", path, stream.msg); -- cgit 1.4.1