kwo pushed a commit to branch master.

http://git.enlightenment.org/legacy/imlib2.git/commit/?id=8bd07dbcea04cd11dbe7cb0774b870848998f212

commit 8bd07dbcea04cd11dbe7cb0774b870848998f212
Author: Kim Woelders <k...@woelders.dk>
Date:   Mon Nov 25 21:49:46 2019 +0100

    gz, bz2 loaders: Fix recent breakage when file name has more than two dots
---
 src/modules/loaders/loader_bz2.c  | 16 +++++++++++-----
 src/modules/loaders/loader_zlib.c | 16 +++++++++++-----
 2 files changed, 22 insertions(+), 10 deletions(-)

diff --git a/src/modules/loaders/loader_bz2.c b/src/modules/loaders/loader_bz2.c
index c54c162..3b6ceba 100644
--- a/src/modules/loaders/loader_bz2.c
+++ b/src/modules/loaders/loader_bz2.c
@@ -51,14 +51,20 @@ load(ImlibImage * im, ImlibProgressFunction progress,
    ImlibLoader        *loader;
    FILE               *fp;
    int                 dest, res;
-   char               *file, *p, *q, tmp[] = "/tmp/imlib2_loader_bz2-XXXXXX";
-   char               *real_ext;
+   const char         *s, *p, *q;
+   char                tmp[] = "/tmp/imlib2_loader_bz2-XXXXXX";
+   char               *file, *real_ext;
 
    /* make sure this file ends in ".bz2" and that there's another ext
     * (e.g. "foo.png.bz2") */
-   p = strrchr(im->real_file, '.');
-   q = strchr(im->real_file, '.');
-   if (!p || p == im->real_file || strcasecmp(p + 1, "bz2") || p == q)
+   for (s = im->real_file, p = q = NULL; *s; s++)
+     {
+        if (*s != '.')
+           continue;
+        q = p;
+        p = s;
+     }
+   if (!q || q == im->real_file || strcasecmp(p + 1, "bz2"))
       return 0;
 
    if (!(real_ext = strndup(q + 1, p - q - 1)))
diff --git a/src/modules/loaders/loader_zlib.c 
b/src/modules/loaders/loader_zlib.c
index 279ac89..3bd9389 100644
--- a/src/modules/loaders/loader_zlib.c
+++ b/src/modules/loaders/loader_zlib.c
@@ -44,14 +44,20 @@ load(ImlibImage * im, ImlibProgressFunction progress,
    ImlibLoader        *loader;
    FILE               *fp;
    int                 dest, res;
-   char               *file, *p, *q, tmp[] = "/tmp/imlib2_loader_zlib-XXXXXX";
-   char               *real_ext;
+   const char         *s, *p, *q;
+   char                tmp[] = "/tmp/imlib2_loader_zlib-XXXXXX";
+   char               *file, *real_ext;
 
    /* make sure this file ends in ".gz" and that there's another ext
     * (e.g. "foo.png.gz") */
-   p = strrchr(im->real_file, '.');
-   q = strchr(im->real_file, '.');
-   if (!p || p == im->real_file || strcasecmp(p + 1, "gz") || p == q)
+   for (s = im->real_file, p = q = NULL; *s; s++)
+     {
+        if (*s != '.')
+           continue;
+        q = p;
+        p = s;
+     }
+   if (!q || q == im->real_file || strcasecmp(p + 1, "gz"))
       return 0;
 
    if (!(real_ext = strndup(q + 1, p - q - 1)))

-- 


Reply via email to