From 8c3e6eab95959571050570da44169113d34bd05f Mon Sep 17 00:00:00 2001 From: heckflosse Date: Tue, 2 Feb 2016 15:31:30 +0100 Subject: [PATCH] Fix crash when opening a folder containing dng files with corrupted thumbs, fixes #3129 --- rtengine/rawimage.cc | 16 ++++++++++++++++ rtengine/rawimage.h | 2 ++ rtengine/rtthumbnail.cc | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/rtengine/rawimage.cc b/rtengine/rawimage.cc index 7eb057b67..3b491eab5 100644 --- a/rtengine/rawimage.cc +++ b/rtengine/rawimage.cc @@ -743,6 +743,22 @@ RawImage::is_supportedThumb() const !thumb_load_raw ); } +bool +RawImage::is_jpegThumb() const +{ + return ( (thumb_width * thumb_height) > 0 && + write_thumb == &rtengine::RawImage::jpeg_thumb && + !thumb_load_raw ); +} + +bool +RawImage::is_ppmThumb() const +{ + return ( (thumb_width * thumb_height) > 0 && + write_thumb == &rtengine::RawImage::ppm_thumb && + !thumb_load_raw ); +} + void RawImage::getXtransMatrix( char XtransMatrix[6][6]) { for(int row = 0; row < 6; row++) diff --git a/rtengine/rawimage.h b/rtengine/rawimage.h index fcc615997..de2baed32 100644 --- a/rtengine/rawimage.h +++ b/rtengine/rawimage.h @@ -275,6 +275,8 @@ public: return ifp; } bool is_supportedThumb() const ; + bool is_jpegThumb() const ; + bool is_ppmThumb() const ; int get_thumbOffset() { return int(thumb_offset); diff --git a/rtengine/rtthumbnail.cc b/rtengine/rtthumbnail.cc index 781b7e566..1f81012ad 100644 --- a/rtengine/rtthumbnail.cc +++ b/rtengine/rtthumbnail.cc @@ -182,7 +182,7 @@ Thumbnail* Thumbnail::loadQuickFromRaw (const Glib::ustring& fname, RawMetaDataL if ( (unsigned char)data[1] == 0xd8 ) { err = img->loadJPEGFromMemory(data, ri->get_thumbLength()); - } else { + } else if (ri->is_ppmThumb()) { err = img->loadPPMFromMemory(data, ri->get_thumbWidth(), ri->get_thumbHeight(), ri->get_thumbSwap(), ri->get_thumbBPS()); } }