summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--bin/glitch.c10
-rw-r--r--bin/pngo.c10
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);