From 5ea9ed57cb6586e736f20729ceb1a28cb5607aee Mon Sep 17 00:00:00 2001 From: June 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 a8037291..e23878f8 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 f5aa1c74..cd9eb7d4 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