Crash on reading floating point demosaiced DNG files, fixes #3600
This commit is contained in:
parent
d54a6bcc8c
commit
1c3b3687f8
@ -9727,10 +9727,28 @@ static void copyFloatDataToInt(float * src, ushort * dst, size_t size, float max
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CLASS deflate_dng_load_raw() {
|
void CLASS deflate_dng_load_raw() {
|
||||||
|
float_raw_image = new float[raw_width * raw_height];
|
||||||
|
|
||||||
|
#ifdef _OPENMP
|
||||||
|
#pragma omp parallel for
|
||||||
|
#endif
|
||||||
|
for (size_t i = 0; i < raw_width * raw_height; ++i)
|
||||||
|
float_raw_image[i] = 0.0f;
|
||||||
|
|
||||||
|
if(tiff_samples != 1) {
|
||||||
|
fprintf(stderr, "deflate_dng_load_raw %s: demosaiced float dng files are not supported\n",ifname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
struct tiff_ifd * ifd = &tiff_ifd[0];
|
struct tiff_ifd * ifd = &tiff_ifd[0];
|
||||||
while (ifd < &tiff_ifd[tiff_nifds] && ifd->offset != data_offset) ++ifd;
|
while (ifd < &tiff_ifd[tiff_nifds] && ifd->offset != data_offset) ++ifd;
|
||||||
if (ifd == &tiff_ifd[tiff_nifds]) {
|
if (ifd == &tiff_ifd[tiff_nifds]) {
|
||||||
fprintf(stderr, "DNG Deflate: Raw image not found???\n");
|
fprintf(stderr, "deflate_dng_load_raw %s: Raw image not found???\n",ifname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ifd->sample_format != 3) { // no floating point data
|
||||||
|
fprintf(stderr, "deflate_dng_load_raw %s: Only float format is supported for deflate compressed dng files\n",ifname);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9742,16 +9760,6 @@ void CLASS deflate_dng_load_raw() {
|
|||||||
default: predFactor = 0; break;
|
default: predFactor = 0; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ifd->sample_format == 3) { // Floating point data
|
|
||||||
float_raw_image = new float[raw_width * raw_height];
|
|
||||||
|
|
||||||
#ifdef _OPENMP
|
|
||||||
#pragma omp parallel for
|
|
||||||
#endif
|
|
||||||
for (size_t i = 0; i < raw_width * raw_height; ++i)
|
|
||||||
float_raw_image[i] = 0.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: This reader is based on the official DNG SDK from Adobe.
|
// NOTE: This reader is based on the official DNG SDK from Adobe.
|
||||||
// It assumes tiles without subtiles, but the standard does not say that
|
// It assumes tiles without subtiles, but the standard does not say that
|
||||||
// subtiles or strips couldn't be used.
|
// subtiles or strips couldn't be used.
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
Patch for vanilla dcraw. Please run this against any new dcraw version copied here.
|
Patch for vanilla dcraw. Please run this against any new dcraw version copied here.
|
||||||
Instructions for patching:
|
Instructions for patching:
|
||||||
1) Download newest dcraw.c file, and copy to this folder.
|
|
||||||
2) Run 'patch -p0 < dcraw.patch' to patch the file. If there are any rejections, please fix them manually.
|
|
||||||
3) Move the patched dcraw.c to dcraw.cc
|
|
||||||
4) Re-copy the vanilla downloaded dcraw.c back to this folder, and update the patch: 'diff -u dcraw.c dcraw.cc > dcraw.patch'
|
|
||||||
|
|
||||||
|
|
||||||
|
1) Create the patch: 'diff -u dcraw.c dcraw.cc > dcraw.patch'
|
||||||
|
2) Download newest dcraw.c file, and copy to this folder.
|
||||||
|
3) Run 'patch -p0 < dcraw.patch' to patch the file. If there are any rejections, please fix them manually.
|
||||||
|
4) Move the patched dcraw.c to dcraw.cc
|
||||||
|
Loading…
x
Reference in New Issue
Block a user