From 0906bafa73198677d52f8f15599a8bed3fc9b234 Mon Sep 17 00:00:00 2001 From: Bixia Zheng Date: Tue, 5 Feb 2019 09:40:12 -0800 Subject: [PATCH] [XLA] InferPadShape should report an error when the result dimension size is a negative number. Modify an existing test case to test the situation. PiperOrigin-RevId: 232502738 --- tensorflow/compiler/xla/service/shape_inference.cc | 4 ++++ tensorflow/compiler/xla/service/shape_inference_test.cc | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/tensorflow/compiler/xla/service/shape_inference.cc b/tensorflow/compiler/xla/service/shape_inference.cc index 12db957b0c9..a403428d050 100644 --- a/tensorflow/compiler/xla/service/shape_inference.cc +++ b/tensorflow/compiler/xla/service/shape_inference.cc @@ -534,6 +534,10 @@ StatusOr InferWindowOutputShape(const Shape& base_shape, p.edge_padding_high() + std::max(operand_shape.dimensions(i) - 1, 0LL) * p.interior_padding(); + if (dimensions[i] < 0) { + return InvalidArgument("Padding result in negative size for dimension %d", + i); + } is_dynamic[i] = operand_shape.is_dynamic_dimension(i); } diff --git a/tensorflow/compiler/xla/service/shape_inference_test.cc b/tensorflow/compiler/xla/service/shape_inference_test.cc index c43db7aae8b..eabc22307a6 100644 --- a/tensorflow/compiler/xla/service/shape_inference_test.cc +++ b/tensorflow/compiler/xla/service/shape_inference_test.cc @@ -1481,6 +1481,14 @@ TEST_F(ShapeInferenceTest, Pad) { Shape inferred_shape = inferred_status.ValueOrDie(); ASSERT_TRUE( ShapeUtil::Equal(ShapeUtil::MakeShape(F32, {39, 31}), inferred_shape)); + + dimension1->set_edge_padding_low(-20); + dimension1->set_edge_padding_high(-10); + auto negative_dimension_size = ShapeInference::InferPadShape( + input_shape, padding_value_shape, padding_config); + ASSERT_FALSE(negative_dimension_size.ok()); + ASSERT_THAT(negative_dimension_size.status().error_message(), + HasSubstr("negative size for dimension 1")); } TEST_F(ShapeInferenceTest, Reverse) {