Package: feh
Version: 1.9-1
Severity: normal

Feh segmentation faults when image list includes enough invalid images with 
long file names after a valid image.

How to reproduce:

wget http://packages.debian.org/Pics/debian-small.png
for I in 1 2 3 4 5 6 7 8 9 10; do echo asdf > 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_"$I".txt;
 done
feh -D 1 *

And result is:

feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_10.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_1.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_2.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_3.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_4.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_5.txt
 - No Imlib2 loader for that file format
Segmentation fault

Compiling from source and using Valgrind gives following output (Valgrind 
prevents segmentation fault from happening):

$ valgrind /tmp/feh-1.9/src/feh --cycle-once -D 1 *
....
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_5.txt
 - No Imlib2 loader for that file format
==21202== Invalid read of size 8
==21202==    at 0x4129B0: feh_list_jump (slideshow.c:493)
==21202==    by 0x4131B1: slideshow_change_image (slideshow.c:204)
==21202==    by 0x416DFE: feh_handle_timer (timers.c:43)
==21202==    by 0x40CF74: feh_main_iteration (main.c:165)
==21202==    by 0x40D0B1: main (main.c:76)
==21202==  Address 0x6ebd428 is 8 bytes inside a block of size 24 free'd
==21202==    at 0x4C240FD: free (vg_replace_malloc.c:366)
==21202==    by 0x587ADF0: gib_list_remove (gib_list.c:419)
==21202==    by 0x4130DC: slideshow_change_image (slideshow.c:272)
==21202==    by 0x416DFE: feh_handle_timer (timers.c:43)
==21202==    by 0x40CF74: feh_main_iteration (main.c:165)
==21202==    by 0x40D0B1: main (main.c:76)
....

Full output of Valgrind run is attached.

-- System Information:
Debian Release: squeeze/sid
  APT prefers testing
  APT policy: (990, 'testing'), (100, 'unstable'), (99, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.35-trunk-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages feh depends on:
ii  giblib1                       1.2.4-5    wrapper library for imlib2, and ot
ii  libc6                         2.11.2-6   Embedded GNU C Library: Shared lib
ii  libimlib2                     1.4.2-8+b2 powerful image loading and renderi
ii  libpng12-0                    1.2.44-1   PNG library - runtime
ii  libx11-6                      2:1.3.3-3  X11 client-side library
ii  libxinerama1                  2:1.1-3    X11 Xinerama extension library

Versions of packages feh recommends:
ii  libjpeg-progs                 8b-1       Programs for manipulating JPEG fil
ii  wget                          1.12-2.1   retrieves files from the web

feh suggests no packages.

-- no debconf information
==21392== Memcheck, a memory error detector
==21392== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==21392== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for 
copyright info
==21392== Command: /tmp/feh-1.9/src/feh --cycle-once -D 1 debian-small.png 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_10.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_1.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_2.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_3.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_4.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_5.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_6.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_7.txt
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_8.txt
 zzzzzzzzzzzzzz
 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_9.txt
==21392== 
==21392== Conditional jump or move depends on uninitialised value(s)
==21392==    at 0x5FED290: inflateReset2 (in /usr/lib/libz.so.1.2.3.4)
==21392==    by 0x5FED37F: inflateInit2_ (in /usr/lib/libz.so.1.2.3.4)
==21392==    by 0x50BDF93: png_create_read_struct_2 (in /lib/libpng12.so.0.44.0)
==21392==    by 0x50BE146: png_create_read_struct (in /lib/libpng12.so.0.44.0)
==21392==    by 0x81510F9: load (in /usr/lib/imlib2/loaders/png.so)
==21392==    by 0x563301D: ??? (in /usr/lib/libImlib2.so.1.4.2)
==21392==    by 0x561EE05: imlib_load_image_with_error_return (in 
/usr/lib/libImlib2.so.1.4.2)
==21392==    by 0x40A239: feh_load_image (imlib.c:155)
==21392==    by 0x4194F9: winwidget_create_from_file (winwidget.c:692)
==21392==    by 0x4137BB: init_slideshow_mode (slideshow.c:61)
==21392==    by 0x40D12B: main (main.c:72)
==21392== 
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_10.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_1.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_2.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_3.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_4.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_5.txt
 - No Imlib2 loader for that file format
==21392== Invalid read of size 8
==21392==    at 0x4129B0: feh_list_jump (slideshow.c:493)
==21392==    by 0x4131B1: slideshow_change_image (slideshow.c:204)
==21392==    by 0x416DFE: feh_handle_timer (timers.c:43)
==21392==    by 0x40CF74: feh_main_iteration (main.c:165)
==21392==    by 0x40D0B1: main (main.c:76)
==21392==  Address 0x6ebd428 is 8 bytes inside a block of size 24 free'd
==21392==    at 0x4C240FD: free (vg_replace_malloc.c:366)
==21392==    by 0x587ADF0: gib_list_remove (gib_list.c:419)
==21392==    by 0x4130DC: slideshow_change_image (slideshow.c:272)
==21392==    by 0x416DFE: feh_handle_timer (timers.c:43)
==21392==    by 0x40CF74: feh_main_iteration (main.c:165)
==21392==    by 0x40D0B1: main (main.c:76)
==21392== 
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_6.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_7.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_8.txt
 - No Imlib2 loader for that file format
feh WARNING: 
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_9.txt
 - No Imlib2 loader for that file format
==21392== 
==21392== HEAP SUMMARY:
==21392==     in use at exit: 87,243 bytes in 247 blocks
==21392==   total heap usage: 1,001 allocs, 754 frees, 584,634 bytes allocated
==21392== 
==21392== LEAK SUMMARY:
==21392==    definitely lost: 0 bytes in 0 blocks
==21392==    indirectly lost: 0 bytes in 0 blocks
==21392==      possibly lost: 435 bytes in 7 blocks
==21392==    still reachable: 86,808 bytes in 240 blocks
==21392==         suppressed: 0 bytes in 0 blocks
==21392== Rerun with --leak-check=full to see details of leaked memory
==21392== 
==21392== For counts of detected and suppressed errors, rerun with: -v
==21392== Use --track-origins=yes to see where uninitialised values come from
==21392== ERROR SUMMARY: 3 errors from 2 contexts (suppressed: 58 from 7)

Reply via email to