From fec077c489a2474bbd3ba1f517675e581a4bfd6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= <4973094+kmilos@users.noreply.github.com> Date: Mon, 25 Oct 2021 10:55:30 +0200 Subject: [PATCH 1/2] Remove obsolete #undef __STRICT_ANSI__ --- CMakeLists.txt | 6 ++++-- src/win/win.h | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e416f5774719..0ebc4fcd19d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -498,14 +498,16 @@ endif(BUILD_TESTING) # set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} "-m${USE_SSE_SET}") # endif(USE_SSE_SET) -# we need some specific functions: +# we need some specific functions/macros outside of ANSI C: if(NOT WIN32) if(CMAKE_SYSTEM MATCHES "SunOS.*") add_definitions("-D_XOPEN_SOURCE=600") else() add_definitions("-D_XOPEN_SOURCE=700") endif(CMAKE_SYSTEM MATCHES "SunOS.*") -endif(NOT WIN32) +else() + add_definitions("-D_USE_MATH_DEFINES") +endif() # Set default component name - that way external modules like RawSpeed will install their # materials under the default component and not under 'Unspecified' diff --git a/src/win/win.h b/src/win/win.h index 0567374e93e1..f1d18b314fbf 100644 --- a/src/win/win.h +++ b/src/win/win.h @@ -5,7 +5,6 @@ #endif #define __MSVCRT_VERSION__ 0x0700 -#undef __STRICT_ANSI__ #define XMD_H #undef _WIN32_WINNT From f1da10c525a83f4b47c3c6d27e3f214b05a7cc28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milo=C5=A1=20Komar=C4=8Devi=C4=87?= <4973094+kmilos@users.noreply.github.com> Date: Mon, 25 Oct 2021 15:29:57 +0200 Subject: [PATCH 2/2] Fix buffer overruns --- src/common/imageio_dng.h | 4 ++-- src/iop/colorbalance.c | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/common/imageio_dng.h b/src/common/imageio_dng.h index b522fb552b80..f99ac2b701ab 100644 --- a/src/common/imageio_dng.h +++ b/src/common/imageio_dng.h @@ -207,12 +207,12 @@ static inline void dt_imageio_write_dng( const uint8_t xtrans[6][6], const float whitelevel, const dt_aligned_pixel_t wb_coeffs, - const char camera_model[24]) + const char camera_makermodel[128]) { FILE *f = g_fopen(filename, "wb"); if(f) { - dt_imageio_dng_write_tiff_header(f, wd, ht, 1.0f / 100.0f, 1.0f / 4.0f, 50.0f, 100.0f, filter, xtrans, whitelevel, wb_coeffs, camera_model); + dt_imageio_dng_write_tiff_header(f, wd, ht, 1.0f / 100.0f, 1.0f / 4.0f, 50.0f, 100.0f, filter, xtrans, whitelevel, wb_coeffs, camera_makermodel); const int k = fwrite(pixel, sizeof(float), (size_t)wd * ht, f); if(k != wd * ht) fprintf(stderr, "[dng_write] Error writing image data to %s\n", filename); fclose(f); diff --git a/src/iop/colorbalance.c b/src/iop/colorbalance.c index c4adec7f6308..27d4cc5471e7 100644 --- a/src/iop/colorbalance.c +++ b/src/iop/colorbalance.c @@ -1407,6 +1407,10 @@ void commit_params(struct dt_iop_module_t *self, dt_iop_params_t *p1, dt_dev_pix d->mode = p->mode; + const dt_aligned_pixel_t lift = { p->lift[CHANNEL_RED], p->lift[CHANNEL_GREEN], p->lift[CHANNEL_BLUE] }; + const dt_aligned_pixel_t gamma = { p->gamma[CHANNEL_RED], p->gamma[CHANNEL_GREEN], p->gamma[CHANNEL_BLUE] }; + const dt_aligned_pixel_t gain = { p->gain[CHANNEL_RED], p->gain[CHANNEL_GREEN], p->gain[CHANNEL_BLUE] }; + switch(d->mode) { case SLOPE_OFFSET_POWER: @@ -1414,19 +1418,19 @@ void commit_params(struct dt_iop_module_t *self, dt_iop_params_t *p1, dt_dev_pix // Correct the luminance in RGB parameters so we don't affect it dt_aligned_pixel_t XYZ; - dt_prophotorgb_to_XYZ((const float *)&p->lift[CHANNEL_RED], XYZ); + dt_prophotorgb_to_XYZ(lift, XYZ); d->lift[CHANNEL_FACTOR] = p->lift[CHANNEL_FACTOR]; d->lift[CHANNEL_RED] = (p->lift[CHANNEL_RED] - XYZ[1]) + 1.f; d->lift[CHANNEL_GREEN] = (p->lift[CHANNEL_GREEN] - XYZ[1]) + 1.f; d->lift[CHANNEL_BLUE] = (p->lift[CHANNEL_BLUE] - XYZ[1]) + 1.f; - dt_prophotorgb_to_XYZ((const float *)&p->gamma[CHANNEL_RED], XYZ); + dt_prophotorgb_to_XYZ(gamma, XYZ); d->gamma[CHANNEL_FACTOR] = p->gamma[CHANNEL_FACTOR]; d->gamma[CHANNEL_RED] = (p->gamma[CHANNEL_RED] - XYZ[1]) + 1.f; d->gamma[CHANNEL_GREEN] = (p->gamma[CHANNEL_GREEN] - XYZ[1]) + 1.f; d->gamma[CHANNEL_BLUE] = (p->gamma[CHANNEL_BLUE] - XYZ[1]) + 1.f; - dt_prophotorgb_to_XYZ((const float *)&p->gain[CHANNEL_RED], XYZ); + dt_prophotorgb_to_XYZ(gain, XYZ); d->gain[CHANNEL_FACTOR] = p->gain[CHANNEL_FACTOR]; d->gain[CHANNEL_RED] = (p->gain[CHANNEL_RED] - XYZ[1]) + 1.f; d->gain[CHANNEL_GREEN] = (p->gain[CHANNEL_GREEN] - XYZ[1]) + 1.f; @@ -1452,19 +1456,20 @@ void commit_params(struct dt_iop_module_t *self, dt_iop_params_t *p1, dt_dev_pix { // Correct the luminance in RGB parameters so we don't affect it dt_aligned_pixel_t XYZ; - dt_prophotorgb_to_XYZ((const float *)&p->lift[CHANNEL_RED], XYZ); + + dt_prophotorgb_to_XYZ(lift, XYZ); d->lift[CHANNEL_FACTOR] = p->lift[CHANNEL_FACTOR]; d->lift[CHANNEL_RED] = (p->lift[CHANNEL_RED] - XYZ[1]) + 1.f; d->lift[CHANNEL_GREEN] = (p->lift[CHANNEL_GREEN] - XYZ[1]) + 1.f; d->lift[CHANNEL_BLUE] = (p->lift[CHANNEL_BLUE] - XYZ[1]) + 1.f; - dt_prophotorgb_to_XYZ((const float *)&p->gamma[CHANNEL_RED], XYZ); + dt_prophotorgb_to_XYZ(gamma, XYZ); d->gamma[CHANNEL_FACTOR] = p->gamma[CHANNEL_FACTOR]; d->gamma[CHANNEL_RED] = (p->gamma[CHANNEL_RED] - XYZ[1]) + 1.f; d->gamma[CHANNEL_GREEN] = (p->gamma[CHANNEL_GREEN] - XYZ[1]) + 1.f; d->gamma[CHANNEL_BLUE] = (p->gamma[CHANNEL_BLUE] - XYZ[1]) + 1.f; - dt_prophotorgb_to_XYZ((const float *)&p->gain[CHANNEL_RED], XYZ); + dt_prophotorgb_to_XYZ(gain, XYZ); d->gain[CHANNEL_FACTOR] = p->gain[CHANNEL_FACTOR]; d->gain[CHANNEL_RED] = (p->gain[CHANNEL_RED] - XYZ[1]) + 1.f; d->gain[CHANNEL_GREEN] = (p->gain[CHANNEL_GREEN] - XYZ[1]) + 1.f;