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
This commit is contained in:
parent
aa7051c8f2
commit
e7ae9f493a
Notes:
blender-bot
2023-02-14 09:02:40 +01:00
Referenced by issue #93527, Toggling Collection Viewlayer visibility messes up the visibility of children objects Referenced by issue #93310, Compositor: Crash due to broken image paths
|
@ -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) {
|
||||
|
|
|
@ -351,7 +351,7 @@ class NodeOperation {
|
|||
*/
|
||||
eExecutionModel execution_model_;
|
||||
|
||||
rcti canvas_;
|
||||
rcti canvas_ = COM_AREA_NONE;
|
||||
|
||||
/**
|
||||
* Flags how to evaluate this operation.
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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_;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue