[Bf-blender-cvs] [e7ae9f493aa] blender-v3.0-release: Fix T93310: crash due to broken image paths

Jacques Lucke noreply at git.blender.org
Mon Nov 29 19:24:02 CET 2021


Commit: e7ae9f493aaa004caf3627489752139f177a807b
Author: Jacques Lucke
Date:   Mon Nov 29 19:23:43 2021 +0100
Branches: blender-v3.0-release
https://developer.blender.org/rBe7ae9f493aaa004caf3627489752139f177a807b

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

===================================================================

M	source/blender/compositor/intern/COM_NodeOperation.cc
M	source/blender/compositor/intern/COM_NodeOperation.h
M	source/blender/compositor/operations/COM_MathBaseOperation.cc
M	source/blender/compositor/operations/COM_MixOperation.cc
M	source/blender/compositor/operations/COM_PlaneTrackOperation.h
M	source/blender/compositor/operations/COM_RotateOperation.cc
M	source/blender/compositor/operations/COM_ScaleOperation.cc
M	source/blender/compositor/operations/COM_SplitOperation.cc
M	source/blender/compositor/operations/COM_TextureOperation.cc
M	source/blender/compositor/operations/COM_TransformOperation.cc
M	source/blender/compositor/operations/COM_TransformOperation.h
M	source/blender/compositor/operations/COM_TranslateOperation.cc
M	source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cc

===================================================================

diff --git a/source/blender/compositor/intern/COM_NodeOperation.cc b/source/blender/compositor/intern/COM_NodeOperation.cc
index 8a7ae1f4fcb..3050d82bf62 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.cc
+++ b/source/blender/compositor/intern/COM_NodeOperation.cc
@@ -150,7 +150,7 @@ void NodeOperation::determine_canvas(const rcti &preferred_area, rcti &r_area)
     modify_determined_canvas_fn_(r_area);
   }
 
-  rcti unused_area;
+  rcti unused_area = COM_AREA_NONE;
   const rcti &local_preferred_area = r_area;
   for (unsigned int index = 0; index < inputs_.size(); index++) {
     if (index == used_canvas_index) {
diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h
index 627fffb1ec7..e969d836464 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.h
+++ b/source/blender/compositor/intern/COM_NodeOperation.h
@@ -351,7 +351,7 @@ class NodeOperation {
    */
   eExecutionModel execution_model_;
 
-  rcti canvas_;
+  rcti canvas_ = COM_AREA_NONE;
 
   /**
    * Flags how to evaluate this operation.
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);



More information about the Bf-blender-cvs mailing list