diff options
-rw-r--r-- | bin/glitch.c | 10 | ||||
-rw-r--r-- | 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); |