[Digikam-devel] Memory corruption in svn head

Craig Howard digikam at choward.ca
Sat Sep 10 10:10:16 BST 2005


Ok, I think I found it.  In AlbumIconView::slotImageListerNewItems, you have
the line

AlbumIconItem* iconItem = new AlbumIconItem(group, item);

The constructor for AlbumIconItem takes an IconGroupItem* as its first
parameter, then inside the constructor casts it to an AlbumIconView*
However, group is an AlbumIconGroupItem* which is merely a IconGroupItem*
instead of an AlbumIconView*  Valgrind indicates that the crash happens with
reads/writes in a QRect, likely referring to AlbumIconItem::tightPixmapRect_

I don't know enough (anything really) about digikam, so I don't have a patch
for you.  Although, I would recommend changing the cast to a dynamic_cast at
least.

Hope that helps.

On Friday 09 September 2005 05:35, Gilles Caulier wrote:
> Le Mardi 06 Septembre 2005 10:20 PM, vous avez écrit :
> > On Tuesday 06 September 2005 15:55, you wrote:
> > > hum perhaps your database file is corrupted. Witch messages you have
> > > when you start digikam from a console ?
> >
> > [snip]
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_WhiteBalance
> > digikam: ImagePlugin_BlurFX plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_BlurFX
> > digikam: ImagePlugin_Despeckle plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Despeckle
> > digikam: ImagePlugin_AntiVignetting plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_AntiVignetting
> > digikam: ImagePlugin_AdjustCurves plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_AdjustCurves
> > digikam: ImagePlugin_FreeRotation plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_FreeRotation
> > digikam: ImagePlugin_Perspective plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Perspective
> > digikam: ImagePlugin_ChannelMixer plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_ChannelMixer
> > digikam: ImagePlugin_Charcoal plugin loaded
> > digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Charcoal
> > *** glibc detected *** malloc(): memory corruption: 0x081651b0 ***
> > zsh: alarm      digikam
> >
> > Not very descriptive, is it?
>
> no. A better way to check memory problem is to use valgrind like this :
>
> // go to your local SVN copy in digikam source code
> # cd graphics/digikam/digikam
>
> // start valgrind to test memory using.
> # valgrind --tool=memcheck ./digikam
>
> You will have console messages like this :
>
> [gilles at pc-caulier digikam]$ pwd
> /mnt/Temp2/SVN/trunk/graphics/digikam/digikam
> [gilles at pc-caulier digikam]$ valgrind --tool=memcheck ./digikam
> ==20533== Memcheck, a memory error detector for x86-linux.
> ==20533== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward et al.
> ==20533== Using valgrind-2.2.0, a program supervision framework for
> x86-linux. ==20533== Copyright (C) 2000-2004, and GNU GPL'd, by Julian
> Seward et al. ==20533== For more details, rerun with: -v
> ==20533==
> ==20533== Conditional jump or move depends on uninitialised value(s)
> ==20533==    at 0x1B8F499F: strchr (strchr.S:177)
> ==20533==
> ==20533== Conditional jump or move depends on uninitialised value(s)
> ==20533==    at 0x1B8ECD80: _dl_relocate_object (do-rel.h:104)
> ==20533==    by 0x1BA208A9: (within /lib/tls/libc-2.3.4.so)
> ==20533==    by 0x1B8EF475: _dl_catch_error (dl-error.c:161)
> ==20533==    by 0x1BA21427: _dl_open (in /lib/tls/libc-2.3.4.so)
> ==20533==
> ==20533== Conditional jump or move depends on uninitialised value(s)
> ==20533==    at 0x1B8ECDA5: _dl_relocate_object (do-rel.h:117)
> ==20533==    by 0x1BA208A9: (within /lib/tls/libc-2.3.4.so)
> ==20533==    by 0x1B8EF475: _dl_catch_error (dl-error.c:161)
> ==20533==    by 0x1BA21427: _dl_open (in /lib/tls/libc-2.3.4.so)
> ==20537==
> ==20537== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 18 from 3)
> ==20537== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==20537== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
> ==20537== For a detailed leak analysis,  rerun with: --leak-check=yes
> ==20537== For counts of detected errors, rerun with: -v
> ==20535==
> ==20535== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 18 from 3)
> ==20535== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==20535== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
> ==20535== For a detailed leak analysis,  rerun with: --leak-check=yes
> ==20535== For counts of detected errors, rerun with: -v
> ==20541==
> ==20541== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 18 from 3)
> ==20541== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==20541== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
> ==20541== For a detailed leak analysis,  rerun with: --leak-check=yes
> ==20541== For counts of detected errors, rerun with: -v
> ==20539==
> ==20539== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 18 from 3)
> ==20539== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==20539== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
> ==20539== For a detailed leak analysis,  rerun with: --leak-check=yes
> ==20539== For counts of detected errors, rerun with: -v
> ==20545==
> ==20545== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 18 from 3)
> ==20545== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==20545== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
> ==20545== For a detailed leak analysis,  rerun with: --leak-check=yes
> ==20545== For counts of detected errors, rerun with: -v
> ==20551==
> ==20551== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 18 from 3)
> ==20551== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==20551== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
> ==20551== For a detailed leak analysis,  rerun with: --leak-check=yes
> ==20551== For counts of detected errors, rerun with: -v
> ==20553==
> ==20553== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 18 from 3)
> ==20553== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==20553== malloc/free: 0 allocs, 0 frees, 0 bytes allocated.
> ==20553== For a detailed leak analysis,  rerun with: --leak-check=yes
> ==20553== For counts of detected errors, rerun with: -v
> digikam: ScanLib: Finding non-existing Albums: 17 ms
> digikam: ScanLib: Finding items not in the database or disk: 973 ms
> digikam: ScanLib: Updating items without date: 6 ms
> digikam: WARNING: Failed to find parent for Tag Events
> digikam: WARNING: Failed to find parent for Tag Peoples
> digikam: WARNING: Failed to find parent for Tag Places
> digikam: WARNING: Failed to find parent for Tag Travels
> digikam: WARNING: Failed to find parent for Tag Friends
> KIPI (loading): KIPI::PluginLoader: plugin KameraKlient is in the ignore
> list for host application
> KIPI (loading): Plugin_JPEGLossless plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin JPEGLossless
> KIPI (loading): Plugin_CDArchiving plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin CDArchiving
> KIPI (loading): Plugin_Imagesgallery plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin ImagesGallery
> KIPI (loading): Plugin_SendImages plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin SendImages
> KIPI (loading): Plugin_FlickrExport plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin FlickrExport
> KIPI (loading): Loaded Plugin_Calendar
> KIPI (loading): KIPI::PluginLoader: Loaded plugin Calendar
> KIPI (loading): Plugin_Mpegencoder plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin MPEGEncoder
> KIPI (loading): Plugin_AcquireImages plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin AcquireImages
> KIPI (loading): Plugin_GalleryExport plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin GalleryExport
> KIPI (loading): Plugin_TimeAdjust plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin TimeAdjust
> KIPI (loading): Plugin_FindImages plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin FindImages
> KIPI (loading): Plugin_PrintWizard plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin PrintWizard
> KIPI (loading): Plugin_WallPaper plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin WallPaper
> KIPI (loading): Plugin_BatchProcessImages plugin loaded
> KIPI (loading): KIPI::PluginLoader: Loaded plugin BatchProcessImages
> KIPI (loading): Loaded RawConverter
> KIPI (loading): KIPI::PluginLoader: Loaded plugin RawConverter
> digikam: ImagePlugin_Core plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Core
> digikam: ImagePlugin_RainDrop plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_RainDrop
> digikam: ImagePlugin_InPainting plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_InPainting
> digikam: ImagePlugin_Infrared plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Infrared
> digikam: ImagePlugin_Texture plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Texture
> digikam: ImagePlugin_Border plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Border
> digikam: ImagePlugin_OilPaint plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_OilPaint
> digikam: ImagePlugin_InsertText plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_InsertText
> digikam: ImagePlugin_Emboss plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Emboss
> digikam: ImagePlugin_Unsharp plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Unsharp
> digikam: ImagePlugin_HotPixels plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_HotPixels
> digikam: ImagePlugin_AdjustLevels plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_AdjustLevels
> digikam: ImagePlugin_ShearTool plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_ShearTool
> digikam: ImagePlugin_Solarize plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Solarize
> digikam: ImagePlugin_DistortionFX plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_DistortionFX
> digikam: ImagePlugin_LensDistortion plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_LensDistortion
> digikam: ImagePlugin_FilmGrain plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_FilmGrain
> digikam: ImagePlugin_BlowUp plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_BlowUp
> digikam: ImagePlugin_Restoration plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Restoration
> digikam: ImagePlugin_SuperImpose plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_SuperImpose
> digikam: ImagePlugin_Refocus plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Refocus
> digikam: ImagePlugin_WhiteBalance plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_WhiteBalance
> digikam: ImagePlugin_BlurFX plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_BlurFX
> digikam: ImagePlugin_Despeckle plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Despeckle
> digikam: ImagePlugin_AntiVignetting plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_AntiVignetting
> digikam: ImagePlugin_AdjustCurves plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_AdjustCurves
> digikam: ImagePlugin_FreeRotation plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_FreeRotation
> digikam: ImagePlugin_Perspective plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Perspective
> digikam: ImagePlugin_ChannelMixer plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_ChannelMixer
> digikam: ImagePlugin_Charcoal plugin loaded
> digikam: ImagePluginLoader: Loaded plugin ImagePlugin_Charcoal
> ...
>
> ... use digikam normally and report me all console messages.

--

Craig Howard



More information about the Digikam-devel mailing list