[Bf-blender-cvs] [436f1a2afad] master: Alembic import: Fix crash with mcol indices out of bounds
Philipp Oeser
noreply at git.blender.org
Fri Dec 28 16:53:08 CET 2018
Commit: 436f1a2afad33e74adb58f9db681dbc6e76fb591
Author: Philipp Oeser
Date: Fri Dec 28 16:14:39 2018 +0100
Branches: master
https://developer.blender.org/rB436f1a2afad33e74adb58f9db681dbc6e76fb591
Alembic import: Fix crash with mcol indices out of bounds
Part of T57377
Reviewers: sybren
Maniphest Tasks: T57377
Differential Revision: https://developer.blender.org/D3847
===================================================================
M source/blender/alembic/intern/abc_customdata.cc
===================================================================
diff --git a/source/blender/alembic/intern/abc_customdata.cc b/source/blender/alembic/intern/abc_customdata.cc
index da69938f34f..89ee753c618 100644
--- a/source/blender/alembic/intern/abc_customdata.cc
+++ b/source/blender/alembic/intern/abc_customdata.cc
@@ -284,6 +284,7 @@ static size_t mcols_out_of_bounds_check(
const size_t array_size,
const std::string & iobject_full_name,
const PropertyHeader &prop_header,
+ bool &r_is_out_of_bounds,
bool &r_bounds_warning_given)
{
if (color_index < array_size) {
@@ -298,7 +299,7 @@ static size_t mcols_out_of_bounds_check(
<< prop_header.getName() << std::endl;
r_bounds_warning_given = true;
}
-
+ r_is_out_of_bounds = true;
return 0;
}
@@ -379,12 +380,15 @@ static void read_custom_data_mcols(const std::string & iobject_full_name,
color_index = (*indices)[color_index];
}
if (use_c3f_ptr) {
+ bool is_mcols_out_of_bounds = false;
color_index = mcols_out_of_bounds_check(
color_index,
c3f_ptr->size(),
iobject_full_name, prop_header,
- bounds_warning_given);
-
+ is_mcols_out_of_bounds, bounds_warning_given);
+ if (is_mcols_out_of_bounds) {
+ continue;
+ }
const Imath::C3f &color = (*c3f_ptr)[color_index];
cface->a = unit_float_to_uchar_clamp(color[0]);
cface->r = unit_float_to_uchar_clamp(color[1]);
@@ -392,12 +396,15 @@ static void read_custom_data_mcols(const std::string & iobject_full_name,
cface->b = 255;
}
else {
+ bool is_mcols_out_of_bounds = false;
color_index = mcols_out_of_bounds_check(
color_index,
c4f_ptr->size(),
iobject_full_name, prop_header,
- bounds_warning_given);
-
+ is_mcols_out_of_bounds, bounds_warning_given);
+ if (is_mcols_out_of_bounds) {
+ continue;
+ }
const Imath::C4f &color = (*c4f_ptr)[color_index];
cface->a = unit_float_to_uchar_clamp(color[0]);
cface->r = unit_float_to_uchar_clamp(color[1]);
More information about the Bf-blender-cvs
mailing list