diff options
Diffstat (limited to 'extern/draco/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc')
-rw-r--r-- | extern/draco/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/extern/draco/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc b/extern/draco/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc index d01fb26aad4..17f32fc1612 100644 --- a/extern/draco/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc +++ b/extern/draco/draco/src/draco/compression/attributes/sequential_integer_attribute_decoder.cc @@ -53,6 +53,11 @@ bool SequentialIntegerAttributeDecoder::DecodeValues( if (!in_buffer->Decode(&prediction_transform_type)) { return false; } + // Check that decoded prediction scheme transform type is valid. + if (prediction_transform_type < PREDICTION_TRANSFORM_NONE || + prediction_transform_type >= NUM_PREDICTION_SCHEME_TRANSFORM_TYPES) { + return false; + } prediction_scheme_ = CreateIntPredictionScheme( static_cast<PredictionSchemeMethod>(prediction_scheme_method), static_cast<PredictionSchemeTransformType>(prediction_transform_type)); @@ -143,8 +148,9 @@ bool SequentialIntegerAttributeDecoder::DecodeIntegerValues( return false; } for (size_t i = 0; i < num_values; ++i) { - if (!in_buffer->Decode(portable_attribute_data + i, num_bytes)) + if (!in_buffer->Decode(portable_attribute_data + i, num_bytes)) { return false; + } } } } @@ -223,12 +229,13 @@ void SequentialIntegerAttributeDecoder::StoreTypedValues(uint32_t num_values) { void SequentialIntegerAttributeDecoder::PreparePortableAttribute( int num_entries, int num_components) { - GeometryAttribute va; - va.Init(attribute()->attribute_type(), nullptr, num_components, DT_INT32, + GeometryAttribute ga; + ga.Init(attribute()->attribute_type(), nullptr, num_components, DT_INT32, false, num_components * DataTypeLength(DT_INT32), 0); - std::unique_ptr<PointAttribute> port_att(new PointAttribute(va)); + std::unique_ptr<PointAttribute> port_att(new PointAttribute(ga)); port_att->SetIdentityMapping(); port_att->Reset(num_entries); + port_att->set_unique_id(attribute()->unique_id()); SetPortableAttribute(std::move(port_att)); } |