File libraw-CVE-2015-8367.patch of Package libraw.38394
From 89d065424f09b788f443734d44857289489ca9e2 Mon Sep 17 00:00:00 2001
From: Alex Tutubalin <lexa@lexa.ru>
Date: Tue, 24 Nov 2015 17:53:24 +0300
Subject: [PATCH] fixed two more problems found by fuzzer
Index: internal/dcraw_common.cpp
===================================================================
--- a/internal/dcraw_common.cpp.orig 2015-12-03 15:17:37.971475439 +0100
+++ b/internal/dcraw_common.cpp 2015-12-03 15:17:37.983475634 +0100
@@ -2751,6 +2751,10 @@
diff = diff ? -diff : 0x80;
if (ftell(ifp) + 12 >= seg[1][1])
diff = 0;
+#ifdef LIBRAW_LIBRARY_BUILD
+ if(pix>=raw_width*raw_height)
+ throw LIBRAW_EXCEPTION_IO_CORRUPT;
+#endif
raw_image[pix] = pred[pix & 1] += diff;
if (!(pix & 1) && HOLE(pix / raw_width)) pix += 2;
}
Index: src/libraw_cxx.cpp
===================================================================
--- a/src/libraw_cxx.cpp.orig 2013-08-23 04:55:48.000000000 +0200
+++ b/src/libraw_cxx.cpp 2015-12-03 15:20:27.314231023 +0100
@@ -1122,6 +1122,7 @@
if(!imgdata.rawdata.raw_image && !imgdata.rawdata.color4_image && !imgdata.rawdata.color3_image) // RawSpeed failed!
{
// Not allocated on RawSpeed call, try call LibRaw
+ int zero_rawimage = 0;
if(decoder_info.decoder_flags & LIBRAW_DECODER_FLATFIELD)
{
imgdata.rawdata.raw_alloc = malloc(rwidth*(rheight+7)*sizeof(imgdata.rawdata.raw_image[0]));
@@ -1138,6 +1139,8 @@
// allocate image as temporary buffer, size
imgdata.rawdata.raw_alloc = 0;
imgdata.image = (ushort (*)[4]) calloc(S.iwidth*S.iheight,sizeof(*imgdata.image));
+ imgdata.rawdata.raw_image = (ushort*) imgdata.image ;
+ zero_rawimage = 1;
}
ID.input->seek(libraw_internal_data.unpacker_data.data_offset, SEEK_SET);
@@ -1145,6 +1148,8 @@
if(load_raw == &LibRaw::unpacked_load_raw && !strcasecmp(imgdata.idata.make,"Nikon"))
C.maximum=65535;
(this->*load_raw)();
+ if(zero_rawimage)
+ imgdata.rawdata.raw_image = 0;
if(load_raw == &LibRaw::unpacked_load_raw && !strcasecmp(imgdata.idata.make,"Nikon"))
C.maximum = m_save;
if (decoder_info.decoder_flags & LIBRAW_DECODER_LEGACY)