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))) --