Package: libexempi3
Version: 2.2.1-2
Usertags: afl

Exempi crashes on the attached file:

$ exempi -x crash.jpeg
processing file crash.jpeg
dump_xmp for file crash.jpeg
Segmentation fault


GDB says it's an out-of-bounds read:

0xf7f24128 in TrimTrailingSpaces (info=0xffffd33c) at ReconcileTIFF.cpp:217
217             if ( (*lastChar != ' ') && (*lastChar != 0) ) return;   // 
Nothing to do.
(gdb) print lastChar
$1 = 0xed056bba <error: Cannot access memory at address 0xed056bba>
(gdb) bt
#0  0xf7f24128 in TrimTrailingSpaces (info=0xffffd33c) at ReconcileTIFF.cpp:217
#1  0xf7f249c1 in ImportSingleTIFF_ASCII (tagInfo=..., xmp=0x8056970, xmpNS=0xf7f4efcc 
"http://ns.adobe.com/tiff/1.0/";, xmpProp=0xf7f4f6f1 "Model") at 
ReconcileTIFF.cpp:465
#2  0xf7f25004 in ImportSingleTIFF (tagInfo=..., nativeEndian=true, xmp=0x8056970, xmpNS=0xf7f4efcc 
"http://ns.adobe.com/tiff/1.0/";, xmpProp=0xf7f4f6f1 "Model") at 
ReconcileTIFF.cpp:667
#3  0xf7f260ce in ImportTIFF_StandardMappings (ifd=0 '\000', tiff=..., 
xmp=0x8056970) at ReconcileTIFF.cpp:1213
#4  0xf7f27e36 in PhotoDataUtils::Import2WayExif (exif=..., xmp=0x8056970, 
iptcDigestState=1) at ReconcileTIFF.cpp:1823
#5  0xf7f23a24 in ImportPhotoData (exif=..., iptc=..., psir=..., 
iptcDigestState=1, xmp=0x8056970, options=4) at ReconcileLegacy.cpp:77
#6  0xf7ec410b in JPEG_MetaHandler::ProcessXMP (this=0x8056948) at 
JPEG_Handler.cpp:694
#7  0xf7eb29aa in XMPFiles::GetXMP (this=0x8056868, xmpObj=0xffffd594, 
xmpPacket=0xffffd580, xmpPacketLen=0xffffd584, packetInfo=0x0) at 
XMPFiles.cpp:1370
#8  0xf7eaee35 in WXMPFiles_GetXMP_1 (xmpObjRef=0x8056868, xmpRef=0x8056ae8, 
clientPacket=0x0, packetInfo=0x0, SetClientString=0xf7e6c6ca 
<TXMPFiles<std::string>::SetClientString(void*, char const*, unsigned int)>, 
wResult=0xffffd600) at WXMPFiles.cpp:238
#9  0xf7e6c2f1 in TXMPFiles<std::string>::GetXMP (this=0x8056858, 
xmpObj=0x8056ad8, xmpPacket=0x0, packetInfo=0x0) at 
../public/include/client-glue/TXMPFiles.incl_cpp:295
#10 0xf7e65313 in xmp_files_get_new_xmp (xf=0x8056858) at exempi.cpp:322
#11 0x08049ea6 in get_xmp_from_file (filename=filename@entry=0xffffd9f5 
"crash.jpeg", no_reconcile=no_reconcile@entry=false, 
is_an_xmp=is_an_xmp@entry=false) at main.cpp:239
#12 0x08049584 in dump_xmp (outio=<optimized out>, is_an_xmp=<optimized out>, 
no_reconcile=<optimized out>, filename=0xffffd9f5 "crash.jpeg") at main.cpp:251
#13 process_file (output="", prop_value="", value_name="", action=<optimized out>, dump_xml=<optimized 
out>, write_in_place=<optimized out>, is_an_xmp=<optimized out>, no_reconcile=<optimized out>, filename=0xffffd9f5 
"crash.jpeg") at main.cpp:337
#14 main (argc=<optimized out>, argv=<optimized out>) at main.cpp:191


This bug was found using American fuzzy lop:
http://lcamtuf.coredump.cx/afl/


-- System Information:
Debian Release: stretch/sid
 APT prefers unstable
 APT policy: (990, 'unstable'), (500, 'experimental')
Architecture: i386 (x86_64)
Foreign Architectures: amd64

Kernel: Linux 3.2.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=C, LC_CTYPE=pl_PL.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: sysvinit (via /sbin/init)

Versions of packages libexempi3 depends on:
ii  libc6              2.19-18
ii  libexpat1          2.1.0-6+b3
ii  libgcc1            1:5.1.1-4
ii  libstdc++6         5.1.1-4
ii  multiarch-support  2.19-18
ii  zlib1g             1:1.2.8.dfsg-2+b1

--
Jakub Wilk

Reply via email to