-
Notifications
You must be signed in to change notification settings - Fork 149
Description
Currently, the decoder reads all bytes of a chunk into an in-memory buffer and then calls parse_chunk
to decide whether the chunk is valid or should be ignored. This is unfortunate because it means that an ignored chunk or one with a bogus size will still cause us to read a large amount of data into memory. If low decoding limits are in use, this might even trigger a limits exceeded error. Instead, we should decide upfront whether we actually want the full contents of a given chunk. If not, we should skip past the chunk without bothering to save it.
A related question is what to do with chunks that are supported, but whose size field is larger than allowed? For instance, an sBIT chunk should be at most 4-bytes. If we encounter an image with a 10 MB sBIT chunk, should we only read the first 4-bytes or should we consider the whole thing invalid and entirely ignore it?