summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlof-Joachim Frahm (欧雅福) <olof@macrolet.net>2019-10-15 16:58:14 +0200
committerKim Woelders <kim@woelders.dk>2019-10-15 20:39:44 +0200
commitff3164df37947bb7ba1e5445a76545ccaf22d8e6 (patch)
tree43853e1ce60cde308900c166ced6565f8c2b01b6
parentab918a65acf8d8ebd0c7211123a1ccd93dccd5fb (diff)
downloadimlib2-ff3164df37947bb7ba1e5445a76545ccaf22d8e6.tar.gz
Check filename before opening archive file.
Summary: Decompressing should be the last step, otherwise files that can't even be loaded will take unnecessarily long only to be discarded immediately. This is in reference to [this issue for feh](https://github.com/derf/feh/issues/477) complaining about long load times in case of accidentally trying to open a big .tar.bz2 archive. Test Plan: Ran on sample from aforementioned ticket, observed immediate response and no further ill effects. Reviewers: kwo Differential Revision: https://phab.enlightenment.org/D10398
-rw-r--r--src/modules/loaders/loader_bz2.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/modules/loaders/loader_bz2.c b/src/modules/loaders/loader_bz2.c
index b3e3aba..f047f7b 100644
--- a/src/modules/loaders/loader_bz2.c
+++ b/src/modules/loaders/loader_bz2.c
@@ -62,14 +62,25 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (!p || p == im->real_file || strcasecmp(p + 1, "bz2") || p == q)
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);
+ return 0;
+ }
+
if (!(fp = fopen(im->real_file, "rb")))
{
+ free(real_ext);
return 0;
}
if ((dest = mkstemp(tmp)) < 0)
{
fclose(fp);
+ free(real_ext);
return 0;
}
@@ -79,15 +90,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;