diff options
author | June McEnroe <june@causal.agency> | 2018-09-02 22:03:31 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-09-02 22:03:31 -0400 |
commit | a68441bca195e3ece2ea6d248c1755c82ec44b2b (patch) | |
tree | 4aac931789acec5309d0b6f7c882e2be8ee4cc50 | |
parent | Use PascalCase for constants in gfx (diff) | |
download | src-a68441bca195e3ece2ea6d248c1755c82ec44b2b.tar.gz src-a68441bca195e3ece2ea6d248c1755c82ec44b2b.zip |
malloc IDAT chunks in pngo and glitch
-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); |