Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package feh for openSUSE:Factory checked in at 2021-01-18 11:28:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/feh (Old) and /work/SRC/openSUSE:Factory/.feh.new.28504 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "feh" Mon Jan 18 11:28:24 2021 rev:39 rq:863711 version:3.6.2 Changes: -------- --- /work/SRC/openSUSE:Factory/feh/feh.changes 2021-01-07 21:23:40.977396653 +0100 +++ /work/SRC/openSUSE:Factory/.feh.new.28504/feh.changes 2021-01-18 11:32:08.592672110 +0100 @@ -1,0 +2,10 @@ +Sat Jan 16 04:55:59 UTC 2021 - Avindra Goolcharan <avin...@opensuse.org> + +- Update to 3.6.2: + * Fix save_filelist not respecting --output-dir + * Fix file descriptor leak when attempting to load truncated image + files (introduced with v3.6) +- manually require libjpeg-turbo for jpegtran. fixes --edit (boo#1080592) +- add feh-rpmlintrc + +------------------------------------------------------------------- Old: ---- feh-3.6.1.tar.bz2 feh-3.6.1.tar.bz2.asc New: ---- feh-3.6.2.tar.bz2 feh-3.6.2.tar.bz2.asc feh-rpmlintrc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ feh.spec ++++++ --- /var/tmp/diff_new_pack.1FiO1U/_old 2021-01-18 11:32:09.644673146 +0100 +++ /var/tmp/diff_new_pack.1FiO1U/_new 2021-01-18 11:32:09.648673150 +0100 @@ -17,7 +17,7 @@ Name: feh -Version: 3.6.1 +Version: 3.6.2 Release: 0 Summary: X11 image viewer License: MIT AND LGPL-2.0-or-later @@ -26,6 +26,7 @@ Source1: https://feh.finalrewind.org/%{name}-%{version}.tar.bz2.asc Source2: %{name}.keyring Source3: jpegexiforient.c +Source99: feh-rpmlintrc # PATCH-FIX-OPENSUSE feh-makefile_optflags.patch https://github.com/derf/feh/issues/71 pascal.ble...@opensuse.org -- pass OPTFLAGS to make instead of hard-coded -O2 -g Patch1: feh-makefile_optflags.patch # PATCH-FIX-UPSTREAM feh-fix_pointer_arithmetics.patch https://github.com/derf/feh/issues/69 pascal.ble...@opensuse.org -- fix compiler warnings on casting pointers as ints @@ -41,6 +42,8 @@ BuildRequires: pkgconfig(xinerama) BuildRequires: pkgconfig(xt) Requires: imlib2-loaders +# Needs only the binaries from it. (boo#1080592) +Requires: libjpeg-turbo Requires(post): desktop-file-utils Requires(post): hicolor-icon-theme Requires(postun): desktop-file-utils ++++++ feh-3.6.1.tar.bz2 -> feh-3.6.2.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/ChangeLog new/feh-3.6.2/ChangeLog --- old/feh-3.6.1/ChangeLog 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/ChangeLog 2021-01-09 12:29:27.000000000 +0100 @@ -1,3 +1,10 @@ +Sat, 09 Jan 2021 12:28:06 +0100 Daniel Friesel <derf+...@finalrewind.org> + +* Release v3.6.2 + * Fix save_filelist not respecting --output-dir + * Fix file descriptor leak when attempting to load truncated image files. + The issue was introduced in v3.6. + Sun, 06 Dec 2020 08:34:15 +0100 Daniel Friesel <derf+...@finalrewind.org> * Release v3.6.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/config.mk new/feh-3.6.2/config.mk --- old/feh-3.6.1/config.mk 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/config.mk 2021-01-09 12:29:27.000000000 +0100 @@ -1,5 +1,5 @@ PACKAGE ?= feh -VERSION ?= 3.6.1 +VERSION ?= 3.6.2 app ?= 0 curl ?= 1 @@ -90,7 +90,7 @@ MAN_INOTIFY = disabled endif -MAN_DATE ?= December 06, 2020 +MAN_DATE ?= January 09, 2021 # Uncomment this to use dmalloc #CFLAGS += -DWITH_DMALLOC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/man/feh.pre new/feh-3.6.2/man/feh.pre --- old/feh-3.6.1/man/feh.pre 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/man/feh.pre 2021-01-09 12:29:27.000000000 +0100 @@ -13,6 +13,7 @@ . .Nm .Op Ar options +.Op Cm -- .Op Ar files | Ar directories | Ar URLs ... . . @@ -671,7 +672,7 @@ .Ar directory when using .Cm --keep-http -or the save_image command. +or the save_image or save_filelist command. By default, files are saved in the current working directory. . .It Cm -p , --preload @@ -1576,7 +1577,10 @@ .It L Bq save_filelist . Save the current filelist as -.Qq feh_PID_ID_filelist +.Qq feh_PID_ID_filelist . +It is saved in the directory specified by +.Cm --output-dir , +if set, and in the current working directory otherwise. . .It m Bq toggle_menu . @@ -1612,7 +1616,10 @@ .It s Bq save_image . Save the current image as -.Qq feh_PID_ID_FILENAME +.Qq feh_PID_ID_FILENAME . +It is saved in the directory specified by +.Cm --output-dir , +if set, and in the current working directory otherwise. . .It w Bq size_to_image . diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/src/deps.mk new/feh-3.6.2/src/deps.mk --- old/feh-3.6.1/src/deps.mk 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/src/deps.mk 2021-01-09 12:29:27.000000000 +0100 @@ -1,57 +1,57 @@ events.o: events.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ - timers.h options.h events.h thumbnail.h + structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ + timers.h options.h events.h thumbnail.h feh_png.o: feh_png.c feh_png.h feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.o: filelist.c feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ - signals.h options.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ + signals.h options.h getopt.o: getopt.c getopt1.o: getopt1.c getopt.h gib_hash.o: gib_hash.c gib_hash.h gib_list.h utils.h debug.h gib_imlib.o: gib_imlib.c gib_imlib.h gib_style.h gib_list.h utils.h \ - debug.h + debug.h gib_list.o: gib_list.c gib_list.h utils.h debug.h gib_style.o: gib_style.c gib_style.h gib_list.h utils.h debug.h imlib.o: imlib.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h filelist.h signals.h \ - winwidget.h options.h + structs.h menu.h utils.h getopt.h debug.h filelist.h signals.h \ + winwidget.h options.h index.o: index.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ - options.h index.h + structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ + options.h index.h keyevents.o: keyevents.c feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h thumbnail.h \ - filelist.h winwidget.h options.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h thumbnail.h \ + filelist.h winwidget.h options.h list.o: list.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h filelist.h options.h + structs.h menu.h utils.h getopt.h debug.h filelist.h options.h main.o: main.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ - timers.h options.h events.h signals.h wallpaper.h + structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ + timers.h options.h events.h signals.h wallpaper.h md5.o: md5.c md5.h menu.o: menu.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h thumbnail.h filelist.h \ - winwidget.h wallpaper.h options.h + structs.h menu.h utils.h getopt.h debug.h thumbnail.h filelist.h \ + winwidget.h wallpaper.h options.h multiwindow.o: multiwindow.c feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h winwidget.h \ - timers.h filelist.h options.h signals.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h winwidget.h \ + timers.h filelist.h options.h signals.h options.o: options.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h filelist.h options.h + structs.h menu.h utils.h getopt.h debug.h filelist.h options.h signals.o: signals.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ - options.h + structs.h menu.h utils.h getopt.h debug.h filelist.h winwidget.h \ + options.h slideshow.o: slideshow.c feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ - timers.h winwidget.h options.h signals.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ + timers.h winwidget.h options.h signals.h thumbnail.o: thumbnail.c feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ - winwidget.h options.h thumbnail.h md5.h feh_png.h index.h signals.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ + winwidget.h options.h thumbnail.h md5.h feh_png.h index.h signals.h timers.o: timers.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h options.h timers.h + structs.h menu.h utils.h getopt.h debug.h options.h timers.h utils.o: utils.c feh.h gib_hash.h gib_list.h gib_imlib.h gib_style.h \ - structs.h menu.h utils.h getopt.h debug.h options.h + structs.h menu.h utils.h getopt.h debug.h options.h wallpaper.o: wallpaper.c feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ - options.h wallpaper.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ + options.h wallpaper.h winwidget.o: winwidget.c feh.h gib_hash.h gib_list.h gib_imlib.h \ - gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ - winwidget.h options.h events.h timers.h + gib_style.h structs.h menu.h utils.h getopt.h debug.h filelist.h \ + winwidget.h options.h events.h timers.h diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/src/feh.h new/feh-3.6.2/src/feh.h --- old/feh-3.6.1/src/feh.h 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/src/feh.h 2021-01-09 12:29:27.000000000 +0100 @@ -115,6 +115,14 @@ SLIDE_JUMP_PREV_DIR }; +enum feh_load_error { + LOAD_ERROR_IMLIB = 0, + LOAD_ERROR_IMAGEMAGICK, + LOAD_ERROR_CURL, + LOAD_ERROR_DCRAW, + LOAD_ERROR_MAGICBYTES +}; + #define INPLACE_EDIT_FLIP -1 #define INPLACE_EDIT_MIRROR -2 @@ -172,7 +180,7 @@ void real_loadables_mode(int loadable); void feh_reload_image(winwidget w, int resize, int force_new); void feh_filelist_image_remove(winwidget winwid, char do_delete); -void feh_imlib_print_load_error(char *file, winwidget w, Imlib_Load_Error err); +void feh_print_load_error(char *file, winwidget w, Imlib_Load_Error err, enum feh_load_error feh_err); void slideshow_save_image(winwidget win); void feh_edit_inplace(winwidget w, int orientation); void feh_edit_inplace_lossless(winwidget w, int orientation); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/src/filelist.c new/feh-3.6.2/src/filelist.c --- old/feh-3.6.1/src/filelist.c 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/src/filelist.c 2021-01-09 12:29:27.000000000 +0100 @@ -659,8 +659,17 @@ void feh_save_filelist() { char *tmpname; + char *base_dir = ""; - tmpname = feh_unique_filename("", "filelist"); + if (opt.output_dir) { + base_dir = estrjoin("", opt.output_dir, "/", NULL); + } + + tmpname = feh_unique_filename(base_dir, "filelist"); + + if (opt.output_dir) { + free(base_dir); + } if (opt.verbose) fprintf(stderr, "saving filelist to filename '%s'\n", tmpname); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/src/imlib.c new/feh-3.6.2/src/imlib.c --- old/feh-3.6.1/src/imlib.c 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/src/imlib.c 2021-01-09 12:29:27.000000000 +0100 @@ -164,11 +164,31 @@ return(i); } -void feh_imlib_print_load_error(char *file, winwidget w, Imlib_Load_Error err) +void feh_print_load_error(char *file, winwidget w, Imlib_Load_Error err, enum feh_load_error feh_err) { if (err == IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS) eprintf("%s - Out of file descriptors while loading", file); else if (!opt.quiet || w) { + switch (feh_err) { + case LOAD_ERROR_IMLIB: + // handled in the next switch/case statement + break; + case LOAD_ERROR_IMAGEMAGICK: + im_weprintf(w, "%s - No ImageMagick loader for that file format", file); + break; + case LOAD_ERROR_CURL: + im_weprintf(w, "%s - libcurl was unable to retrieve the file", file); + break; + case LOAD_ERROR_DCRAW: + im_weprintf(w, "%s - Unable to open preview via dcraw", file); + break; + case LOAD_ERROR_MAGICBYTES: + im_weprintf(w, "%s - Does not look like an image (magic bytes missing)", file); + break; + } + if (feh_err != LOAD_ERROR_IMLIB) { + return; + } switch (err) { case IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST: im_weprintf(w, "%s - File does not exist", file); @@ -181,11 +201,7 @@ break; case IMLIB_LOAD_ERROR_UNKNOWN: case IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT: - if (getenv("FEH_SKIP_MAGIC")) { - im_weprintf(w, "%s - No Imlib2 loader for that file format", file); - } else { - im_weprintf(w, "%s - Does not look like an image (magic bytes missing)", file); - } + im_weprintf(w, "%s - No Imlib2 loader for that file format", file); break; case IMLIB_LOAD_ERROR_PATH_TOO_LONG: im_weprintf(w, "%s - Path specified is too long", file); @@ -238,6 +254,7 @@ return 0; } if (fread(buf, 1, 16, fh) != 16) { + fclose(fh); return 0; } fclose(fh); @@ -290,6 +307,11 @@ // might be webp return 1; } + if (!memcmp(buf + 4, "ftyphei", 7) || !memcmp(buf + 4, "ftypmif1", 8)) { + // HEIC/HEIF - note that this is only supported in imlib2-heic. Ordinary + // imlib2 releases do not support heic/heif images as of 2021-01. + return 1; + } buf[15] = 0; if (strstr((char *)buf, "XPM")) { // XPM @@ -310,6 +332,7 @@ int feh_load_image(Imlib_Image * im, feh_file * file) { Imlib_Load_Error err = IMLIB_LOAD_ERROR_NONE; + enum feh_load_error feh_err = LOAD_ERROR_IMLIB; enum { SRC_IMLIB, SRC_HTTP, SRC_MAGICK, SRC_DCRAW } image_source = SRC_IMLIB; char *tmpname = NULL; char *real_filename = NULL; @@ -322,19 +345,16 @@ if (path_is_url(file->filename)) { image_source = SRC_HTTP; - if ((tmpname = feh_http_load_image(file->filename)) == NULL) + if ((tmpname = feh_http_load_image(file->filename)) == NULL) { + feh_err = LOAD_ERROR_CURL; err = IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST; - } - else if (opt.conversion_timeout >= 0 && feh_file_is_raw(file->filename)) { - image_source = SRC_DCRAW; - tmpname = feh_dcraw_load_image(file->filename); - if (!tmpname) - err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT; + } } else { if (feh_is_image(file)) { *im = imlib_load_image_with_error_return(file->filename, &err); } else { + feh_err = LOAD_ERROR_MAGICBYTES; err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT; } } @@ -342,8 +362,20 @@ if (opt.conversion_timeout >= 0 && ( (err == IMLIB_LOAD_ERROR_UNKNOWN) || (err == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT))) { - image_source = SRC_MAGICK; - tmpname = feh_magick_load_image(file->filename); + if (feh_file_is_raw(file->filename)) { + image_source = SRC_DCRAW; + tmpname = feh_dcraw_load_image(file->filename); + if (!tmpname) { + feh_err = LOAD_ERROR_DCRAW; + } + } else { + image_source = SRC_MAGICK; + feh_err = LOAD_ERROR_IMLIB; + tmpname = feh_magick_load_image(file->filename); + if (!tmpname) { + feh_err = LOAD_ERROR_IMAGEMAGICK; + } + } } if (tmpname) { @@ -403,7 +435,7 @@ fputs("\n", stderr); reset_output = 1; } - feh_imlib_print_load_error(file->filename, NULL, err); + feh_print_load_error(file->filename, NULL, err, feh_err); D(("Load *failed*\n")); return(0); } @@ -543,11 +575,9 @@ } if (childpid == 0) { - if (opt.quiet) { - int devnull = open("/dev/null", O_WRONLY); - dup2(devnull, 1); - dup2(devnull, 2); - } + int devnull = open("/dev/null", O_WRONLY); + dup2(devnull, 1); + dup2(devnull, 2); execlp("dcraw", "dcraw", "-i", filename, NULL); _exit(1); } else { @@ -1531,8 +1561,8 @@ FEH_FILE(w->file->data)->filename, &err); gib_imlib_free_image(old); if (err) - feh_imlib_print_load_error(FEH_FILE(w->file->data)->filename, - w, err); + feh_print_load_error(FEH_FILE(w->file->data)->filename, + w, err, LOAD_ERROR_IMLIB); feh_reload_image(w, 1, 1); } else { /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/src/index.c new/feh-3.6.2/src/index.c --- old/feh-3.6.1/src/index.c 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/src/index.c 2021-01-09 12:29:27.000000000 +0100 @@ -332,7 +332,7 @@ gib_imlib_save_image_with_error_return(im_main, output_buf, &err); if (err) { - feh_imlib_print_load_error(output_buf, im_main, err); + feh_print_load_error(output_buf, im_main, err, LOAD_ERROR_IMLIB); } else if (opt.verbose) { int tw, th; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/src/slideshow.c new/feh-3.6.2/src/slideshow.c --- old/feh-3.6.1/src/slideshow.c 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/src/slideshow.c 2021-01-09 12:29:27.000000000 +0100 @@ -638,7 +638,7 @@ gib_imlib_save_image_with_error_return(win->im, tmpname, &err); if (err) - feh_imlib_print_load_error(tmpname, win, err); + feh_print_load_error(tmpname, win, err, LOAD_ERROR_IMLIB); free(tmpname); return; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/feh-3.6.1/src/thumbnail.c new/feh-3.6.2/src/thumbnail.c --- old/feh-3.6.1/src/thumbnail.c 2020-12-06 08:54:38.000000000 +0100 +++ new/feh-3.6.2/src/thumbnail.c 2021-01-09 12:29:27.000000000 +0100 @@ -392,7 +392,7 @@ } gib_imlib_save_image_with_error_return(td.im_main, output_buf, &err); if (err) { - feh_imlib_print_load_error(output_buf, td.im_main, err); + feh_print_load_error(output_buf, td.im_main, err, LOAD_ERROR_IMLIB); } else if (opt.verbose) { int tw, th; ++++++ feh-rpmlintrc ++++++ # we just need jpegtran bin from libjpeg-turbo (boo#1080592) addFilter("W: explicit-lib-dependency")