From d5b7a67c71d34356fcedb2ca3275372254d9d9c9 Mon Sep 17 00:00:00 2001 From: liyong Date: Mon, 29 Mar 2021 14:14:44 +0800 Subject: [PATCH] fix asan issue --- mindspore/ccsrc/minddata/dataset/core/tensor_shape.cc | 3 ++- .../ccsrc/minddata/dataset/kernels/image/image_utils.cc | 6 ++++-- .../minddata/dataset/kernels/image/lite_cv/image_process.cc | 6 ++---- .../ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc | 4 ++-- tests/ut/cpp/dataset/image_process_test.cc | 5 +++-- tests/ut/cpp/dataset/optimization_pass_test.cc | 2 +- 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/mindspore/ccsrc/minddata/dataset/core/tensor_shape.cc b/mindspore/ccsrc/minddata/dataset/core/tensor_shape.cc index 16a24ce38e..67e43d4f59 100644 --- a/mindspore/ccsrc/minddata/dataset/core/tensor_shape.cc +++ b/mindspore/ccsrc/minddata/dataset/core/tensor_shape.cc @@ -232,7 +232,8 @@ std::vector TensorShape::Strides() const { return std::vector{ Status TensorShape::ToFlatIndex(const std::vector &index, dsize_t *flat_index) const { *flat_index = 0; for (size_t k = 0; k < index.size(); k++) { - *flat_index += index[k] * strides_[k + 1]; // skip the first element of strides_ which is numOfElements + *flat_index += + (index[k] == 0) ? 0 : index[k] * strides_[k + 1]; // skip the first element of strides_ which is numOfElements } CHECK_FAIL_RETURN_UNEXPECTED(*flat_index < NumOfElements(), "Not a valid index"); return Status::OK(); diff --git a/mindspore/ccsrc/minddata/dataset/kernels/image/image_utils.cc b/mindspore/ccsrc/minddata/dataset/kernels/image/image_utils.cc index 213fe83549..c2249f47fb 100644 --- a/mindspore/ccsrc/minddata/dataset/kernels/image/image_utils.cc +++ b/mindspore/ccsrc/minddata/dataset/kernels/image/image_utils.cc @@ -394,8 +394,10 @@ Status Crop(const std::shared_ptr &input, std::shared_ptr *outpu } try { TensorShape shape{h, w}; - int num_channels = input_cv->shape()[2]; - if (input_cv->Rank() == 3) shape = shape.AppendDim(num_channels); + if (input_cv->Rank() == 3) { + int num_channels = input_cv->shape()[2]; + shape = shape.AppendDim(num_channels); + } std::shared_ptr output_cv; RETURN_IF_NOT_OK(CVTensor::CreateEmpty(shape, input_cv->type(), &output_cv)); cv::Rect roi(x, y, w, h); diff --git a/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.cc b/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.cc index 6e65db0641..f240b6b1a2 100644 --- a/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.cc +++ b/mindspore/ccsrc/minddata/dataset/kernels/image/lite_cv/image_process.cc @@ -1581,13 +1581,11 @@ bool GetPerspectiveTransform(std::vector src_point, std::vector ds n[i + 4] = dst_point[i].y; } - double x[9] = {0}; - LiteMat dst(1, 8, x, LDataType(LDataType::DOUBLE)); + M.Init(3, 3, LDataType(LDataType::DOUBLE)); + LiteMat dst(1, 8, M.data_ptr_, LDataType(LDataType::DOUBLE)); GetPerspectiveTransformImpl(src1, src2, dst); dst.ptr(8)[0] = 1; - M.Init(3, 3, dst.data_ptr_, dst.data_type_); - return true; } diff --git a/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc b/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc index 01011cc90a..3c8b90fd31 100644 --- a/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc +++ b/mindspore/ccsrc/minddata/dataset/kernels/ir/vision/vision_ir.cc @@ -1129,12 +1129,12 @@ Status RandomRotationOperation::ValidateParams() { MS_LOG(ERROR) << "RandomRotation: degrees must be a vector of one or two values, got: " << degrees_; RETURN_STATUS_SYNTAX_ERROR(err_msg); } - if ((degrees_[1] < degrees_[0]) && (degrees_.size() == 2)) { + if ((degrees_.size() == 2) && (degrees_[1] < degrees_[0])) { std::string err_msg = "RandomRotation: degrees must be in the format of (min, max), got: (" + std::to_string(degrees_[0]) + ", " + std::to_string(degrees_[1]) + ")"; MS_LOG(ERROR) << err_msg; RETURN_STATUS_SYNTAX_ERROR(err_msg); - } else if ((degrees_[0] < 0) && degrees_.size() == 1) { + } else if ((degrees_.size() == 1) && (degrees_[0] < 0)) { std::string err_msg = "RandomRotation: if degrees only has one value, it must be greater than or equal to 0, got: " + std::to_string(degrees_[0]); diff --git a/tests/ut/cpp/dataset/image_process_test.cc b/tests/ut/cpp/dataset/image_process_test.cc index b5e5ecc58a..8131205057 100644 --- a/tests/ut/cpp/dataset/image_process_test.cc +++ b/tests/ut/cpp/dataset/image_process_test.cc @@ -239,8 +239,7 @@ TEST_F(MindDataImageProcess, testNV21ToBGR) { bool ret = ReadYUV(filename, w, h, &yuv_data); ASSERT_TRUE(ret == true); - cv::Mat yuvimg(h * 3 / 2, w, CV_8UC1); - memcpy(yuvimg.data, yuv_data, w * h * 3 / 2); + cv::Mat yuvimg(h * 3 / 2, w, CV_8UC1, yuv_data); cv::Mat rgbimage; cv::cvtColor(yuvimg, rgbimage, cv::COLOR_YUV2BGR_NV21); @@ -250,6 +249,7 @@ TEST_F(MindDataImageProcess, testNV21ToBGR) { ret = InitFromPixel(yuv_data, LPixelType::NV212BGR, LDataType::UINT8, w, h, lite_mat_bgr); ASSERT_TRUE(ret == true); cv::Mat dst_image(lite_mat_bgr.height_, lite_mat_bgr.width_, CV_8UC3, lite_mat_bgr.data_ptr_); + free(yuv_data); } TEST_F(MindDataImageProcess, testNV12ToBGR) { @@ -270,6 +270,7 @@ TEST_F(MindDataImageProcess, testNV12ToBGR) { ret = InitFromPixel(yuv_data, LPixelType::NV122BGR, LDataType::UINT8, w, h, lite_mat_bgr); ASSERT_TRUE(ret == true); cv::Mat dst_image(lite_mat_bgr.height_, lite_mat_bgr.width_, CV_8UC3, lite_mat_bgr.data_ptr_); + free(yuv_data); } TEST_F(MindDataImageProcess, testExtractChannel) { diff --git a/tests/ut/cpp/dataset/optimization_pass_test.cc b/tests/ut/cpp/dataset/optimization_pass_test.cc index cc82678874..a257824745 100644 --- a/tests/ut/cpp/dataset/optimization_pass_test.cc +++ b/tests/ut/cpp/dataset/optimization_pass_test.cc @@ -93,7 +93,7 @@ TEST_F(MindDataTestOptimizationPass, MindDataTestTensorFusionPassPreBuiltTensorO // make prebuilt tensor operation auto decode = std::make_shared(vision::DecodeOperation(true).Build()); auto resize = std::make_shared( - vision::RandomResizedCropOperation({100}, {0.5}, {0.1}, InterpolationMode::kNearestNeighbour, 5).Build()); + vision::RandomResizedCropOperation({100, 100}, {0.5, 1.0}, {0.1, 0.2}, InterpolationMode::kNearestNeighbour, 5).Build()); std::vector> op_list = {decode, resize}; std::vector op_name = {"image"}; std::shared_ptr root = ImageFolder(folder_path, false)->IRNode();