GZIP loader: Check filename before uncompress

Inspired by corresponding bz2 loader fix.

Also remove pointless call to stat().
This commit is contained in:
Kim Woelders 2019-10-15 20:08:43 +02:00
parent ff3164df37
commit 5e267577bd
1 changed files with 11 additions and 12 deletions

View File

@ -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;
}
@ -74,15 +82,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
close(dest);
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);