https://bugs.kde.org/show_bug.cgi?id=426597

            Bug ID: 426597
           Summary: stack underflow crash in Digikam::DImg::load()
           Product: digikam
           Version: 7.2.0
          Platform: Debian unstable
                OS: Linux
            Status: REPORTED
          Severity: grave
          Priority: NOR
         Component: general
          Assignee: digikam-bugs-n...@kde.org
          Reporter: f...@kdmurray.id.au
  Target Milestone: ---

SUMMARY

A stack underflow crash occurs with both 7.1.0 and the current master branch
from git when compiled on debain sid. Traceback below, with asan. Appears to be
in QString::QString() as part of the DRawInfo() ctor, while doing
Digikam::DImg::load()


STEPS TO REPRODUCE
1. Run digikam, and trigger loading any RAW file (in my case CR2)

NB: i've re-compiled this with -fsanitize=address to hopefully help debugging,
but the error initially occured without this flag. 


OBSERVED RESULT

```
digikam.general: Using  16  CPU core to run threads                             
digikam.general: Action Thread run  1  new jobs                                 
digikam.general: Cancel Main Thread                                             
digikam.general: One job is done                                                
digikam.general: Cancel Main Thread                                             
digikam.database: Starting scan!                                                
digikam.general: Stacked View Mode :  1                                         
digikam.metaengine: index     :  0                                              
digikam.metaengine: properties:  3                                              
digikam.metaengine: Exif color-space tag is sRGB. Using default sRGB ICC
profile.                                                                        
digikam.metaengine: index     :  0                                              
digikam.metaengine: properties:  3                                              
digikam.metaengine: Exif color-space tag is sRGB. Using default sRGB ICC
profile.                                              
digikam.general: Stacked View Mode :  1                                         
digikam.metaengine: index     :  0                                              
digikam.metaengine: properties:  3                             
digikam.metaengine: Exif color-space tag is sRGB. Using default sRGB ICC
profile.                                                                        
digikam.metaengine: index     :  0                                              
digikam.metaengine: properties:  3                                              
digikam.metaengine: Exif color-space tag is sRGB. Using default sRGB ICC
profile.                                                                        
digikam.general: Stacked View Mode :  1                                         
digikam.metaengine: index     :  0                                              
digikam.metaengine: properties:  3                                              
digikam.metaengine: Exif color-space tag is sRGB. Using default sRGB ICC
profile.                                                                        
digikam.metaengine: index     :  0                                              
digikam.metaengine: properties:  3                                              
digikam.metaengine: Exif color-space tag is sRGB. Using default sRGB ICC
profile.                                  
digikam.general: Shortcut value:  1                                             
digikam.general: Detected change, triggering rescan of
"/home/kevin/photos/library/2020/2020-09-99_around-home/todo/"                  
digikam.general: Writing tags                                                   
digikam.metaengine: MetaEngine::metadataWritingMode 3                           
digikam.metaengine: Will write Metadata to file
"/home/kevin/photos/library/2020/2020-09-99_around-home/todo/029A0172.CR2"      
digikam.metaengine: "029A0172.CR2" is a TIFF based RAW file,  writing to such a
file is disabled by current settings.                                           
digikam.metaengine: Will write XMP sidecar for file "029A0172.CR2"              
digikam.general: Detected change, triggering rescan of
"/home/kevin/photos/library/2020/2020-09-99_around-home/todo/"                  
digikam.metaengine: wroteComment:  false                                        
digikam.metaengine: wroteEXIF:  true                                            
digikam.metaengine: wroteIPTC:  true                                            
digikam.metaengine: wroteXMP:  true                                             
digikam.metaengine: Metadata for file "029A0172.CR2" written to XMP sidecar.    
digikam.dimg:
"/home/kevin/photos/library/2020/2020-09-99_around-home/todo/029A0172.CR2" :
"RAW" file identified               
=================================================================               
==1495583==ERROR: AddressSanitizer: stack-buffer-underflow on address
0x7f4eeb83eca0 at pc 0x7f4f3f5c5f72 bp 0x7f4eeb83e9b0 sp 0x7f4eeb83e9a8         
WRITE of size 8 at 0x7f4eeb83eca0 thread T72 (Thread (pooled))                  
    #0 0x7f4f3f5c5f71 in QString::QString()
(/home/kevin/.homedir/opt/dk-compiled/lib/x86_64-linux-gnu/libdigikamcore.so.7.2.0+0xd95f71)
 
    #1 0x7f4f3fe3d2b9 in Digikam::DRawInfo::DRawInfo()
(/home/kevin/.homedir/opt/dk-compiled/lib/x86_64-linux-gnu/libdigikamcore.so.7.2.0+0x160d2b9)
 
    #2 0x7f4efc56bcd0 in DigikamRAWDImgPlugin::DImgRAWLoader::load(QString
const&, Digikam::DImgLoaderObserver*)
(/usr/lib/x86_64-linux-gnu/qt5/plugins/digikam/dimg/DImg_RAW_Plugin.so+0x7cd0)  
    #3 0x7f4f3d7b689f  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x38289f)         

Address 0x7f4eeb83eca0 is located in stack of thread T72 (Thread (pooled)) at
offset 0 in frame                                                               
    #0 0x7f4f3f9d3c2d in Digikam::DImg::load(QString const&, int,
Digikam::DImgLoaderObserver*, Digikam::DRawDecoding const&)
(/home/kevin/.homedir/opt/dk-compiled/lib/x86_64-linux-gnu/libdigikamcore.so.7.2.0+0x11a3c2d)
 

  This frame has 37 object(s):                                                  
    [32, 36) 'loadFlags' (line 112)                                             
    [48, 52) '<unknown>'                                                        
    [64, 68) '<unknown>'                                                        
    [80, 84) '<unknown>'                                                        
    [96, 100) '<unknown>'                                                       
    [112, 116) '<unknown>'                                                      
    [128, 136) 'fileInfo' (line 103)                                            
    [160, 168) '<unknown>'                                                      
    [192, 200) '<unknown>'                                                      
    [224, 232) 'lock' (line 115)                                                
    [256, 264) '<unknown>'                                                      
    [288, 296) '<unknown>'                                                      
    [320, 328) '<unknown>'                                                      
    [352, 360) '<unknown>'                                                      
    [384, 392) '<unknown>'                                                      
    [416, 424) '<unknown>'                                                      
    [448, 456) '<unknown>'                                                      
    [480, 488) '<unknown>'                                                      
    [512, 520) '<unknown>'                                                      
    [544, 552) '<unknown>'                                                      
    [576, 584) '<unknown>'                                                      
    [608, 616) '<unknown>'                                                     
    [640, 656) '<unknown>'                                                      
    [672, 688) '<unknown>'                                                      
    [704, 720) '<unknown>'                                                      
    [736, 752) '<unknown>'                                                      
    [768, 784) '<unknown>'                                                      
    [800, 816) '<unknown>'                                                      
    [832, 848) '<unknown>'                                                      
    [864, 880) '<unknown>'                                                      
    [896, 912) '<unknown>'                                                      
    [928, 944) '<unknown>'                                                      
    [960, 992) '<unknown>'                                                      
    [1024, 1056) '<unknown>'                                                    
    [1088, 1120) '<unknown>'                                                    
    [1152, 1184) '<unknown>'                                                    
    [1216, 1248) '<unknown>'                                                    
HINT: this may be a false positive if your program uses some custom stack
unwind mechanism, swapcontext or vfork               
      (longjmp and C++ exceptions *are* supported)                              
Thread T72 (Thread (pooled)) created by T0 here:                                
    #0 0x7f4f450c52a2 in __interceptor_pthread_create
(/lib/x86_64-linux-gnu/libasan.so.6+0x552a2)                             
    #1 0x7f4f3d4fc4da in QThread::start(QThread::Priority)
(/lib/x86_64-linux-gnu/libQt5Core.so.5+0xc84da)                     

SUMMARY: AddressSanitizer: stack-buffer-underflow
(/home/kevin/.homedir/opt/dk-compiled/lib/x86_64-linux-gnu/libdigikamcore.so.7.2.0+0xd95f71)
in QString::QString()                                                           
Shadow bytes around the buggy address:                                          
  0x0fea5d6ffd40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00               
  0x0fea5d6ffd50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00               
  0x0fea5d6ffd60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00               
  0x0fea5d6ffd70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00               
  0x0fea5d6ffd80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00               
=>0x0fea5d6ffd90: 00 00 00 00[f1]f1 f1 f1 04 f2 f8 f2 f8 f2 04 f2               
  0x0fea5d6ffda0: 04 f2 04 f2 00 f2 f2 f2 00 f2 f2 f2 f8 f2 f2 f2               
  0x0fea5d6ffdb0: 00 f2 f2 f2 f8 f2 f2 f2 f8 f2 f2 f2 f8 f2 f2 f2               
  0x0fea5d6ffdc0: f8 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2               
  0x0fea5d6ffdd0: 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2               
  0x0fea5d6ffde0: 00 f2 f2 f2 f8 f8 f2 f2 f8 f8 f2 f2 f8 f8 f2 f2               
Shadow byte legend (one shadow byte represents 8 application bytes):            
  Addressable:           00                                                     
  Partially addressable: 01 02 03 04 05 06 07                                   
  Heap left redzone:       fa                                                   
  Freed heap region:       fd                                                   
  Stack left redzone:      f1                                                   
  Stack mid redzone:       f2                                                   
  Stack right redzone:     f3                                                   
  Stack after return:      f5                                                   
  Stack use after scope:   f8                                                   
  Global redzone:          f9                                                   
  Global init order:       f6                                                   
  Poisoned by user:        f7                                                   
  Container overflow:      fc                                                   
  Array cookie:            ac                                                   
  Intra object redzone:    bb                                                   
  ASan internal:           fe                                                   
  Left alloca redzone:     ca                                                   
  Right alloca redzone:    cb                                                   
  Shadow gap:              cc                                                   
==1495583==ABORTING
```


EXPECTED RESULT

No crash.


SOFTWARE/OS VERSIONS
Linux/KDE Plasma: 
(available in About System)
KDE Plasma Version: 5.17.5
KDE Frameworks Version: 20.04.1 / 5.70.0
Qt Version: 5.14

ADDITIONAL INFORMATION

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to