diff options
author | Bert Münnich <ber.t@posteo.de> | 2016-10-20 10:21:55 +0200 |
---|---|---|
committer | Bert Münnich <ber.t@posteo.de> | 2016-10-20 10:21:55 +0200 |
commit | 878d97068cb6c8ae044332ac3c8218fcad635b42 (patch) | |
tree | 1282bbed9d2743baafd23d9aad8ec02d2d9d7ca7 | |
parent | 891f389f0e228759b05dadec9dafdea5dc772f70 (diff) |
Only open regular files; fixes issue #252
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | image.c | 5 | ||||
-rw-r--r-- | thumbs.c | 16 |
3 files changed, 15 insertions, 8 deletions
@@ -1,4 +1,4 @@ -VERSION := git-20160928 +VERSION := git-20161020 PREFIX := /usr/local MANPREFIX := $(PREFIX)/share/man @@ -19,6 +19,7 @@ #include <errno.h> #include <stdlib.h> #include <string.h> +#include <sys/stat.h> #include <sys/types.h> #include <unistd.h> @@ -296,8 +297,10 @@ bool img_load_gif(img_t *img, const fileinfo_t *file) bool img_load(img_t *img, const fileinfo_t *file) { const char *fmt; + struct stat st; - if (access(file->path, R_OK) < 0 || + if (access(file->path, R_OK) == -1 || + stat(file->path, &st) == -1 || !S_ISREG(st.st_mode) || (img->im = imlib_load_image(file->path)) == NULL) { if (file->flags & FF_WARN) @@ -239,6 +239,7 @@ bool tns_load(tns_t *tns, int n, bool force, bool cache_only) float zw, zh; thumb_t *t; fileinfo_t *file; + struct stat st; Imlib_Image im = NULL; if (n < 0 || n >= *tns->cnt) @@ -330,12 +331,15 @@ bool tns_load(tns_t *tns, int n, bool force, bool cache_only) } } - if (im == NULL && (access(file->path, R_OK) < 0 || - (im = imlib_load_image(file->path)) == NULL)) - { - if (file->flags & FF_WARN) - error(0, 0, "%s: Error opening image", file->name); - return false; + if (im == NULL) { + if (access(file->path, R_OK) == -1 || + stat(file->path, &st) == -1 || !S_ISREG(st.st_mode) || + (im = imlib_load_image(file->path)) == NULL) + { + if (file->flags & FF_WARN) + error(0, 0, "%s: Error opening image", file->name); + return false; + } } imlib_context_set_image(im); |