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] 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;