summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Woelders <kim@woelders.dk>2019-10-15 20:08:43 +0200
committerKim Woelders <kim@woelders.dk>2019-10-15 20:39:44 +0200
commit5e267577bdaa6ce5bb9e5fc238d7a58408f2fd27 (patch)
tree01d565298e26e06ad035f2fff1fae0741da32eef
parentff3164df37947bb7ba1e5445a76545ccaf22d8e6 (diff)
downloadimlib2-5e267577bdaa6ce5bb9e5fc238d7a58408f2fd27.tar.gz
GZIP loader: Check filename before uncompress
Inspired by corresponding bz2 loader fix. Also remove pointless call to stat().
-rw-r--r--src/modules/loaders/loader_zlib.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/src/modules/loaders/loader_zlib.c b/src/modules/loaders/loader_zlib.c
index 29c39a0..aba9583 100644
--- a/src/modules/loaders/loader_zlib.c
+++ b/src/modules/loaders/loader_zlib.c
@@ -42,10 +42,10 @@ load(ImlibImage * im, ImlibProgressFunction progress,
char progress_granularity, char immediate_load)
{
ImlibLoader *loader;
- int src, dest, res;
+ int src;
+ int dest, res;
char *file, *p, *q, tmp[] = "/tmp/imlib2_loader_zlib-XXXXXX";
char *real_ext;
- struct stat st;
/* check that this file ends in *.gz and that there's another ext
* (e.g. "foo.png.gz"
@@ -55,17 +55,25 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (!p || p == im->real_file || strcasecmp(p + 1, "gz") || p == q)
return 0;
- if (stat(im->real_file, &st) < 0)
+ if (!(real_ext = strndup(im->real_file, p - im->real_file)))
return 0;
+ if (!(loader = __imlib_FindBestLoaderForFile(real_ext, 0)))
+ {
+ free(real_ext);
+ return 0;
+ }
+
if ((src = open(im->real_file, O_RDONLY)) < 0)
{
+ free(real_ext);
return 0;
}
if ((dest = mkstemp(tmp)) < 0)
{
close(src);
+ free(real_ext);
return 0;
}
@@ -75,15 +83,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (!res)
{
- unlink(tmp);
- return 0;
- }
-
- if (!(real_ext = strndup(im->real_file, p - im->real_file)))
- return 0;
-
- if (!(loader = __imlib_FindBestLoaderForFile(real_ext, 0)))
- {
free(real_ext);
unlink(tmp);
return 0;