Bug 340879

Summary: digiKam crashes after getting unexpected but reasonable output from libexiv2
Product: [Applications] digikam Reporter: matt
Component: Metadata-VideoAssignee: Digikam Developers <digikam-bugs-null>
Status: RESOLVED FIXED    
Severity: crash CC: caulier.gilles
Priority: NOR    
Version: 4.4.0   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed In: 6.0.0

Description matt 2014-11-12 07:40:39 UTC
Setting up DigiKam for the first time and letting it scan my photo/video library. It crashes on a certain .mpg fille.
digikam(27194)/KEXIV2: Cannot load metadata from file   (Error # 11 :  /home/termi/FreeNAS-Photos/From iPhoto/2007/Roll 169/movies 005.mpg: The file contains data of an unknown image type 
KCrash: Application 'digikam' crashing...

digiKam should not be crashing simply because libexiv2 outputs something reasonable like "The file contains data of an unknown image type." I've verified this by running exiv2 on the command line against this file. This isn't a bug in libexiv2. It's expected output after trying to scan a funky video file.

Reproducible: Always

Steps to Reproduce:
1. Setup digiKam for the first time.
2. Point to my photo/video library.
3. Let it index all the files. It'll crash every time it gets to a certain video file.

Actual Results:  
Crash with the error above.

Expected Results:  
Finish indexing the photo/video library and continue first use.

-- Backtrace:
Application: digiKam (digikam), signal: Floating point exception
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
[Current thread is 1 (Thread 0x7fb12999bac0 (LWP 27194))]

Thread 4 (Thread 0x7fb102e10700 (LWP 27195)):
#0  0x00007fb1223a939d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fb1079c7248 in ?? () from /lib/x86_64-linux-gnu/libusb-1.0.so.0
#2  0x00007fb11e5e10a5 in start_thread (arg=0x7fb102e10700) at pthread_create.c:309
#3  0x00007fb1223b384d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 3 (Thread 0x7fb0fbaa9700 (LWP 27196)):
#0  0x00007fb1223a939d in poll () at ../sysdeps/unix/syscall-template.S:81
#1  0x00007fb11a431ee4 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007fb11a431ffc in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007fb1232cf04e in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#4  0x00007fb1232a04f1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#5  0x00007fb1232a0805 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#6  0x00007fb12319ec39 in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#7  0x00007fb123282033 in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#8  0x00007fb1231a139f in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#9  0x00007fb11e5e10a5 in start_thread (arg=0x7fb0fbaa9700) at pthread_create.c:309
#10 0x00007fb1223b384d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 2 (Thread 0x7fb0fb2a8700 (LWP 27281)):
[KCrash Handler]
#5  0x00007fb11f7a9965 in Exiv2::QuickTimeVideo::movieHeaderDecoder(unsigned long) () from /usr/lib/x86_64-linux-gnu/libexiv2.so.13
#6  0x00007fb11f7af7eb in Exiv2::QuickTimeVideo::tagDecoder(Exiv2::DataBuf&, unsigned long) () from /usr/lib/x86_64-linux-gnu/libexiv2.so.13
#7  0x00007fb11f7afba0 in Exiv2::QuickTimeVideo::decodeBlock() () from /usr/lib/x86_64-linux-gnu/libexiv2.so.13
#8  0x00007fb11f7af7b8 in Exiv2::QuickTimeVideo::tagDecoder(Exiv2::DataBuf&, unsigned long) () from /usr/lib/x86_64-linux-gnu/libexiv2.so.13
#9  0x00007fb11f7afba0 in Exiv2::QuickTimeVideo::decodeBlock() () from /usr/lib/x86_64-linux-gnu/libexiv2.so.13
#10 0x00007fb11f7afded in Exiv2::QuickTimeVideo::readMetadata() () from /usr/lib/x86_64-linux-gnu/libexiv2.so.13
#11 0x00007fb1275f0c1d in KExiv2Iface::KExiv2::load(QString const&) const () from /usr/lib/libkexiv2.so.11
#12 0x00007fb126ed6c36 in Digikam::DMetadata::load(QString const&) const () from /usr/lib/digikam/libdigikamcore.so.4.4.0
#13 0x00007fb1269041c7 in Digikam::ImageScanner::loadFromDisk() () from /usr/lib/digikam/libdigikamdatabase.so.4.4.0
#14 0x00007fb126904450 in Digikam::ImageScanner::newFile(int) () from /usr/lib/digikam/libdigikamdatabase.so.4.4.0
#15 0x00007fb126895de6 in Digikam::CollectionScanner::scanNewFile(QFileInfo const&, int) () from /usr/lib/digikam/libdigikamdatabase.so.4.4.0
#16 0x00007fb126899852 in Digikam::CollectionScanner::scanAlbum(Digikam::CollectionLocation const&, QString const&) () from /usr/lib/digikam/libdigikamdatabase.so.4.4.0
#17 0x00007fb12689970f in Digikam::CollectionScanner::scanAlbum(Digikam::CollectionLocation const&, QString const&) () from /usr/lib/digikam/libdigikamdatabase.so.4.4.0
#18 0x00007fb12689a0a3 in Digikam::CollectionScanner::scanAlbumRoot(Digikam::CollectionLocation const&) () from /usr/lib/digikam/libdigikamdatabase.so.4.4.0
#19 0x00007fb12689bc8d in Digikam::CollectionScanner::completeScan() () from /usr/lib/digikam/libdigikamdatabase.so.4.4.0
#20 0x000000000060a6d0 in ?? ()
#21 0x00007fb1231a139f in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#22 0x00007fb11e5e10a5 in start_thread (arg=0x7fb0fb2a8700) at pthread_create.c:309
#23 0x00007fb1223b384d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

Thread 1 (Thread 0x7fb12999bac0 (LWP 27194)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fb1231a1894 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#2  0x00007fb1231a0f6e in QThread::wait(unsigned long) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#3  0x00000000006099ab in ?? ()
#4  0x0000000000609b47 in ?? ()
#5  0x00007fb1222f3599 in __run_exit_handlers (status=1, listp=0x7fb1226776c8 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true) at exit.c:82
#6  0x00007fb1222f35e5 in __GI_exit (status=<optimized out>) at exit.c:104
#7  0x00007fb123d12818 in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#8  0x00007fb1249d1fd0 in KApplication::xioErrhandler(_XDisplay*) () from /usr/lib/libkdeui.so.5
#9  0x00007fb120da288e in _XIOError () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#10 0x00007fb120da01fd in _XEventsQueued () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#11 0x00007fb120d92190 in XEventsQueued () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#12 0x00007fb123d4df5c in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#13 0x00007fb11a4318c1 in g_main_context_check () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#14 0x00007fb11a431e83 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#15 0x00007fb11a431ffc in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#16 0x00007fb1232cf031 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#17 0x00007fb123d4e4e6 in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#18 0x00007fb1232a04f1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#19 0x00007fb1232a0805 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#20 0x0000000000606591 in ?? ()
#21 0x000000000052a487 in ?? ()
#22 0x00007fb1232b9f41 in QObject::event(QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#23 0x00007fb123cab11c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#24 0x00007fb123cb1870 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#25 0x00007fb1249d357a in KApplication::notify(QObject*, QEvent*) () from /usr/lib/libkdeui.so.5
#26 0x00007fb1232a186d in QCoreApplication::notifyInternal(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#27 0x00007fb1232a4f41 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#28 0x00007fb1232ceed3 in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#29 0x00007fb11a431c5d in g_main_context_dispatch () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#30 0x00007fb11a431f48 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#31 0x00007fb11a431ffc in g_main_context_iteration () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#32 0x00007fb1232cf031 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#33 0x00007fb123d4e4e6 in ?? () from /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#34 0x00007fb1232a04f1 in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#35 0x00007fb1232a0805 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#36 0x00007fb1232a5f67 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#37 0x0000000000495f76 in ?? ()
#38 0x00007fb1222daec5 in __libc_start_main (main=0x494e30, argc=1, argv=0x7fffb7ca3058, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffb7ca3048) at libc-start.c:287
#39 0x000000000049856f in _start ()

May be a duplicate of or related to bug 332721, which was prematurely closed.
Comment 1 matt 2014-11-12 07:43:31 UTC
I can supply the crashy .mpg file. Too big to attach here, though.

BTW I'm on Ubuntu 14.10. Also tried on Ubuntu 14.04 w/ digiKam 4.4.0 backport. Same issue.
Comment 2 caulier.gilles 2014-11-12 10:28:31 UTC
Please report this problem to Exiv2 bugzilla. The real problem is here, not in digiKam.

http://dev.exiv2.org/projects/exiv2/issues

Gilles Caulier
Comment 3 caulier.gilles 2018-02-28 12:38:33 UTC
With 6.0.0, we have now a FFMpeg low level metadata parser based on libav C API
for video files database registration.

The Exiv2 video support is not used anymore as this code is buggous and nobody
sound motivated in Exiv2 to finalize the code.

The original post for this file must be fixed now and video metadata support
with ffmpeg must be enough to populate database entries.

Gilles Caulier