summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--src/filelist.c13
2 files changed, 16 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7ea3cc9..c5d95fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -7,6 +7,9 @@ git HEAD
<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=655431>
* Do not refer to --help unless help is compiled in
<http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=657171>
+ * Do not overwrite filelist file if it actually is an image
+ (-f and -F may get mixed up)
+ <https://github.com/derf/feh/issues/79>
Mon, 02 Jan 2012 11:54:01 +0100 Daniel Friesel <derf@finalrewind.org>
diff --git a/src/filelist.c b/src/filelist.c
index 6439b9d..94baa06 100644
--- a/src/filelist.c
+++ b/src/filelist.c
@@ -460,10 +460,23 @@ gib_list *feh_read_filelist(char *filename)
FILE *fp;
gib_list *list = NULL;
char s[1024], s1[1024];
+ Imlib_Image tmp_im;
+ struct stat st;
if (!filename)
return(NULL);
+ /*
+ * feh_load_image will fail horribly if filename is not seekable
+ */
+ if (!stat(filename, &st) && S_ISREG(st.st_mode) &&
+ feh_load_image_char(&tmp_im, filename)) {
+ weprintf("Filelist file %s is an image, refusing to use it.\n"
+ "Did you mix up -f and -F?", filename);
+ opt.filelistfile = NULL;
+ return NULL;
+ }
+
errno = 0;
if ((fp = fopen(filename, "r")) == NULL) {
/* return quietly, as it's okay to specify a filelist file that doesn't