From e7ae9f493aaa004caf3627489752139f177a807b Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Mon, 29 Nov 2021 19:23:43 +0100 Subject: Fix T93310: crash due to broken image paths The crash was caused by allocating an uninitialized amount of memory. This fix initializes a bunch of variables that could cause the error. It should be possible to also fix this in the function that actually uses the uninitialized memory, but that could cause unknown consequences that are a bit too risky for 3.0. Just initializing some variables should be safe though. For more details see D13369. Differential Revision: https://developer.blender.org/D13369 --- source/blender/compositor/operations/COM_MathBaseOperation.cc | 2 +- source/blender/compositor/operations/COM_MixOperation.cc | 2 +- source/blender/compositor/operations/COM_PlaneTrackOperation.h | 4 ++-- source/blender/compositor/operations/COM_RotateOperation.cc | 2 +- source/blender/compositor/operations/COM_ScaleOperation.cc | 4 ++-- source/blender/compositor/operations/COM_SplitOperation.cc | 2 +- source/blender/compositor/operations/COM_TextureOperation.cc | 2 +- source/blender/compositor/operations/COM_TransformOperation.cc | 2 +- source/blender/compositor/operations/COM_TransformOperation.h | 6 +++--- source/blender/compositor/operations/COM_TranslateOperation.cc | 2 +- .../compositor/operations/COM_VariableSizeBokehBlurOperation.cc | 4 ++-- 11 files changed, 16 insertions(+), 16 deletions(-) (limited to 'source/blender/compositor/operations') diff --git a/source/blender/compositor/operations/COM_MathBaseOperation.cc b/source/blender/compositor/operations/COM_MathBaseOperation.cc index 86993ffe887..1a4684ae3f0 100644 --- a/source/blender/compositor/operations/COM_MathBaseOperation.cc +++ b/source/blender/compositor/operations/COM_MathBaseOperation.cc @@ -52,7 +52,7 @@ void MathBaseOperation::deinit_execution() void MathBaseOperation::determine_canvas(const rcti &preferred_area, rcti &r_area) { NodeOperationInput *socket; - rcti temp_area; + rcti temp_area = COM_AREA_NONE; socket = this->get_input_socket(0); const bool determined = socket->determine_canvas(COM_AREA_NONE, temp_area); if (determined) { diff --git a/source/blender/compositor/operations/COM_MixOperation.cc b/source/blender/compositor/operations/COM_MixOperation.cc index 09bbb633459..edae4454b13 100644 --- a/source/blender/compositor/operations/COM_MixOperation.cc +++ b/source/blender/compositor/operations/COM_MixOperation.cc @@ -70,7 +70,7 @@ void MixBaseOperation::execute_pixel_sampled(float output[4], void MixBaseOperation::determine_canvas(const rcti &preferred_area, rcti &r_area) { NodeOperationInput *socket; - rcti temp_area; + rcti temp_area = COM_AREA_NONE; socket = this->get_input_socket(1); bool determined = socket->determine_canvas(COM_AREA_NONE, temp_area); diff --git a/source/blender/compositor/operations/COM_PlaneTrackOperation.h b/source/blender/compositor/operations/COM_PlaneTrackOperation.h index 4c584ca43f4..22ece04b900 100644 --- a/source/blender/compositor/operations/COM_PlaneTrackOperation.h +++ b/source/blender/compositor/operations/COM_PlaneTrackOperation.h @@ -81,7 +81,7 @@ class PlaneTrackMaskOperation : public PlaneDistortMaskOperation, public PlaneTr { PlaneTrackCommon::determine_canvas(preferred_area, r_area); - rcti unused; + rcti unused = COM_AREA_NONE; rcti &preferred = r_area; NodeOperation::determine_canvas(preferred, unused); } @@ -102,7 +102,7 @@ class PlaneTrackWarpImageOperation : public PlaneDistortWarpImageOperation, { PlaneTrackCommon::determine_canvas(preferred_area, r_area); - rcti unused; + rcti unused = COM_AREA_NONE; rcti &preferred = r_area; NodeOperation::determine_canvas(preferred, unused); } diff --git a/source/blender/compositor/operations/COM_RotateOperation.cc b/source/blender/compositor/operations/COM_RotateOperation.cc index 8129516f81c..145a2f9c9d0 100644 --- a/source/blender/compositor/operations/COM_RotateOperation.cc +++ b/source/blender/compositor/operations/COM_RotateOperation.cc @@ -227,7 +227,7 @@ void RotateOperation::determine_canvas(const rcti &preferred_area, rcti &r_area) get_input_socket(IMAGE_INPUT_INDEX)->determine_canvas(preferred_area, r_area); if (image_determined) { rcti input_canvas = r_area; - rcti unused; + rcti unused = COM_AREA_NONE; get_input_socket(DEGREE_INPUT_INDEX)->determine_canvas(input_canvas, unused); ensure_degree(); diff --git a/source/blender/compositor/operations/COM_ScaleOperation.cc b/source/blender/compositor/operations/COM_ScaleOperation.cc index 350934b0d3b..5a351055241 100644 --- a/source/blender/compositor/operations/COM_ScaleOperation.cc +++ b/source/blender/compositor/operations/COM_ScaleOperation.cc @@ -223,7 +223,7 @@ void ScaleOperation::determine_canvas(const rcti &preferred_area, rcti &r_area) get_input_socket(IMAGE_INPUT_INDEX)->determine_canvas(preferred_area, r_area); if (image_determined) { rcti image_canvas = r_area; - rcti unused; + rcti unused = COM_AREA_NONE; NodeOperationInput *x_socket = get_input_socket(X_INPUT_INDEX); NodeOperationInput *y_socket = get_input_socket(Y_INPUT_INDEX); x_socket->determine_canvas(image_canvas, unused); @@ -503,7 +503,7 @@ void ScaleFixedSizeOperation::determine_canvas(const rcti &preferred_area, rcti rcti local_preferred = preferred_area; local_preferred.xmax = local_preferred.xmin + new_width_; local_preferred.ymax = local_preferred.ymin + new_height_; - rcti input_canvas; + rcti input_canvas = COM_AREA_NONE; const bool input_determined = get_input_socket(0)->determine_canvas(local_preferred, input_canvas); if (input_determined) { diff --git a/source/blender/compositor/operations/COM_SplitOperation.cc b/source/blender/compositor/operations/COM_SplitOperation.cc index e98c5c986f5..39d097b02e1 100644 --- a/source/blender/compositor/operations/COM_SplitOperation.cc +++ b/source/blender/compositor/operations/COM_SplitOperation.cc @@ -60,7 +60,7 @@ void SplitOperation::execute_pixel_sampled(float output[4], void SplitOperation::determine_canvas(const rcti &preferred_area, rcti &r_area) { - rcti unused_area; + rcti unused_area = COM_AREA_NONE; const bool determined = this->get_input_socket(0)->determine_canvas(COM_AREA_NONE, unused_area); this->set_canvas_input_index(determined ? 0 : 1); diff --git a/source/blender/compositor/operations/COM_TextureOperation.cc b/source/blender/compositor/operations/COM_TextureOperation.cc index 2ed83e87569..f5d47478a8d 100644 --- a/source/blender/compositor/operations/COM_TextureOperation.cc +++ b/source/blender/compositor/operations/COM_TextureOperation.cc @@ -80,7 +80,7 @@ void TextureBaseOperation::determine_canvas(const rcti &preferred_area, rcti &r_ if (execution_model_ == eExecutionModel::FullFrame) { /* Determine inputs. */ - rcti temp; + rcti temp = COM_AREA_NONE; NodeOperation::determine_canvas(r_area, temp); } } diff --git a/source/blender/compositor/operations/COM_TransformOperation.cc b/source/blender/compositor/operations/COM_TransformOperation.cc index be9bb32e7f0..5b8cd35cb26 100644 --- a/source/blender/compositor/operations/COM_TransformOperation.cc +++ b/source/blender/compositor/operations/COM_TransformOperation.cc @@ -126,7 +126,7 @@ void TransformOperation::determine_canvas(const rcti &preferred_area, rcti &r_ar get_input_socket(IMAGE_INPUT_INDEX)->determine_canvas(preferred_area, r_area); if (image_determined) { rcti image_canvas = r_area; - rcti unused; + rcti unused = COM_AREA_NONE; get_input_socket(X_INPUT_INDEX)->determine_canvas(image_canvas, unused); get_input_socket(Y_INPUT_INDEX)->determine_canvas(image_canvas, unused); get_input_socket(DEGREE_INPUT_INDEX)->determine_canvas(image_canvas, unused); diff --git a/source/blender/compositor/operations/COM_TransformOperation.h b/source/blender/compositor/operations/COM_TransformOperation.h index 3c5584a1bea..5c646b215f2 100644 --- a/source/blender/compositor/operations/COM_TransformOperation.h +++ b/source/blender/compositor/operations/COM_TransformOperation.h @@ -35,9 +35,9 @@ class TransformOperation : public MultiThreadedOperation { int translate_x_; int translate_y_; float scale_; - rcti scale_canvas_; - rcti rotate_canvas_; - rcti translate_canvas_; + rcti scale_canvas_ = COM_AREA_NONE; + rcti rotate_canvas_ = COM_AREA_NONE; + rcti translate_canvas_ = COM_AREA_NONE; /* Set variables. */ PixelSampler sampler_; diff --git a/source/blender/compositor/operations/COM_TranslateOperation.cc b/source/blender/compositor/operations/COM_TranslateOperation.cc index 89c7468a67c..d3c87b09fb7 100644 --- a/source/blender/compositor/operations/COM_TranslateOperation.cc +++ b/source/blender/compositor/operations/COM_TranslateOperation.cc @@ -158,7 +158,7 @@ void TranslateCanvasOperation::determine_canvas(const rcti &preferred_area, rcti if (determined) { NodeOperationInput *x_socket = get_input_socket(X_INPUT_INDEX); NodeOperationInput *y_socket = get_input_socket(Y_INPUT_INDEX); - rcti unused; + rcti unused = COM_AREA_NONE; x_socket->determine_canvas(r_area, unused); y_socket->determine_canvas(r_area, unused); diff --git a/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cc b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cc index 891518d53bf..86bc6d0041a 100644 --- a/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cc +++ b/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cc @@ -69,7 +69,7 @@ void *VariableSizeBokehBlurOperation::initialize_tile_data(rcti *rect) data->bokeh = (MemoryBuffer *)input_bokeh_program_->initialize_tile_data(rect); data->size = (MemoryBuffer *)input_size_program_->initialize_tile_data(rect); - rcti rect2; + rcti rect2 = COM_AREA_NONE; this->determine_depending_area_of_interest( rect, (ReadBufferOperation *)input_size_program_, &rect2); @@ -398,7 +398,7 @@ void VariableSizeBokehBlurOperation::update_memory_buffer_partial(MemoryBuffer * p.image_width = this->get_width(); p.image_height = this->get_height(); - rcti scalar_area; + rcti scalar_area = COM_AREA_NONE; this->get_area_of_interest(SIZE_INPUT_INDEX, area, scalar_area); BLI_rcti_isect(&scalar_area, &p.size_input->get_rect(), &scalar_area); const float max_size = p.size_input->get_max_value(scalar_area); -- cgit v1.2.3