summary refs log tree commit diff
path: root/bin/glitch.c
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2018-09-02 22:03:31 -0400
committerJune McEnroe <june@causal.agency>2018-09-02 22:03:31 -0400
commita68441bca195e3ece2ea6d248c1755c82ec44b2b (patch)
tree4aac931789acec5309d0b6f7c882e2be8ee4cc50 /bin/glitch.c
parentUse PascalCase for constants in gfx (diff)
downloadsrc-a68441bca195e3ece2ea6d248c1755c82ec44b2b.tar.gz
src-a68441bca195e3ece2ea6d248c1755c82ec44b2b.zip
malloc IDAT chunks in pngo and glitch
Diffstat (limited to 'bin/glitch.c')
-rw-r--r--bin/glitch.c10
1 files changed, 7 insertions, 3 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);