summary refs log tree commit diff
path: root/bin/pngo.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
commit5ea9ed57cb6586e736f20729ceb1a28cb5607aee (patch)
treea4286359d113e80fa4362aa69e94fce622f11564 /bin/pngo.c
parentUse PascalCase for constants in gfx (diff)
downloadsrc-5ea9ed57cb6586e736f20729ceb1a28cb5607aee.tar.gz
src-5ea9ed57cb6586e736f20729ceb1a28cb5607aee.zip
malloc IDAT chunks in pngo and glitch
Diffstat (limited to 'bin/pngo.c')
-rw-r--r--bin/pngo.c10
1 files changed, 7 insertions, 3 deletions
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);