Safe dynamic reshape option (only copy when the new_shape is not a nullptr)
PiperOrigin-RevId: 288254073 Change-Id: I68725492420f9c3a344b32f1c21d4762b9b47382
This commit is contained in:
parent
dec91cdf18
commit
5c5a144afc
@ -499,10 +499,15 @@ TfLiteStatus ParseOpData(const Operator* op, BuiltinOperator op_type,
|
|||||||
auto params = safe_allocator.Allocate<TfLiteReshapeParams>();
|
auto params = safe_allocator.Allocate<TfLiteReshapeParams>();
|
||||||
if (const auto* schema_params = op->builtin_options_as_ReshapeOptions()) {
|
if (const auto* schema_params = op->builtin_options_as_ReshapeOptions()) {
|
||||||
auto* new_shape = schema_params->new_shape();
|
auto* new_shape = schema_params->new_shape();
|
||||||
TF_LITE_ENSURE_STATUS(FlatBufferIntVectorToArray(
|
// TODO(b/147203660): We need to figure out when dynamic reshape
|
||||||
sizeof(params->shape), new_shape, params->shape, error_reporter,
|
// (new_shape is a tensor) happens, why the option is not a nullptr.
|
||||||
"reshape"));
|
// But nonethless, we should only copy when new_shape is not a nullptr.
|
||||||
params->num_dimensions = new_shape->size();
|
if (new_shape) {
|
||||||
|
TF_LITE_ENSURE_STATUS(FlatBufferIntVectorToArray(
|
||||||
|
sizeof(params->shape), new_shape, params->shape, error_reporter,
|
||||||
|
"reshape"));
|
||||||
|
params->num_dimensions = new_shape->size();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
*builtin_data = reinterpret_cast<void*>(params.release());
|
*builtin_data = reinterpret_cast<void*>(params.release());
|
||||||
break;
|
break;
|
||||||
|
@ -93,15 +93,12 @@ TEST_F(FlatbufferConversionsTest, ParseBadSqueeze) {
|
|||||||
"Input array not provided for operation 'squeeze'"));
|
"Input array not provided for operation 'squeeze'"));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(FlatbufferConversionsTest, ParseBadReshape) {
|
TEST_F(FlatbufferConversionsTest, ParseDynamicReshape) {
|
||||||
const Operator* op = BuildTestOperator(
|
const Operator* op = BuildTestOperator(
|
||||||
BuiltinOptions_ReshapeOptions, CreateSqueezeOptions(builder_).Union());
|
BuiltinOptions_ReshapeOptions, CreateReshapeOptions(builder_).Union());
|
||||||
void* output_data = nullptr;
|
void* output_data = nullptr;
|
||||||
EXPECT_NE(kTfLiteOk, ParseOpData(op, BuiltinOperator_RESHAPE, &mock_reporter_,
|
EXPECT_EQ(kTfLiteOk, ParseOpData(op, BuiltinOperator_RESHAPE, &mock_reporter_,
|
||||||
&mock_allocator_, &output_data));
|
&mock_allocator_, &output_data));
|
||||||
EXPECT_THAT(mock_reporter_.GetAsString(),
|
|
||||||
::testing::ContainsRegex(
|
|
||||||
"Input array not provided for operation 'reshape'"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(FlatbufferConversionsTest, TestParseOpDataConv) {
|
TEST_F(FlatbufferConversionsTest, TestParseOpDataConv) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user