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)

-- 


Reply via email to