kwo pushed a commit to branch master. http://git.enlightenment.org/legacy/imlib2.git/commit/?id=64df90de3d356bdc7026ea6b48f1f629d8d87a98
commit 64df90de3d356bdc7026ea6b48f1f629d8d87a98 Author: Kim Woelders <k...@woelders.dk> Date: Sun Dec 6 15:29:30 2020 +0100 WEBP loader: Add initial signature check Avoid potentially wasting much time when loading/checking large non-webp files. --- src/modules/loaders/loader_webp.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/modules/loaders/loader_webp.c b/src/modules/loaders/loader_webp.c index 9810540..a5a13c0 100644 --- a/src/modules/loaders/loader_webp.c +++ b/src/modules/loaders/loader_webp.c @@ -40,6 +40,7 @@ load2(ImlibImage * im, int load_data) int encoded_fd; WebPBitstreamFeatures features; VP8StatusCode vp8return; + unsigned int size; encoded_fd = fileno(im->fp); if (encoded_fd < 0) @@ -54,7 +55,20 @@ load2(ImlibImage * im, int load_data) if (!encoded_data) goto quit; - if (read(encoded_fd, encoded_data, stats.st_size) < stats.st_size) + /* Check signature */ + size = 12; + if (read(encoded_fd, encoded_data, size) != size) + goto quit; + if (memcmp(encoded_data + 0, "RIFF", 4) != 0 || + memcmp(encoded_data + 8, "WEBP", 4) != 0) + goto quit; + + size = stats.st_size; + if (size != stats.st_size) + goto quit; + + size -= 12; + if (read(encoded_fd, encoded_data + 12, size) != size) goto quit; if (WebPGetInfo(encoded_data, stats.st_size, &im->w, &im->h) == 0) --