From c925aa0c14912287926266c5ce9750bc2d348423 Mon Sep 17 00:00:00 2001 From: liyong Date: Tue, 6 Apr 2021 09:49:33 +0800 Subject: [PATCH] fix signed overflow --- mindspore/ccsrc/minddata/dataset/core/tensor.cc | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/mindspore/ccsrc/minddata/dataset/core/tensor.cc b/mindspore/ccsrc/minddata/dataset/core/tensor.cc index 6d3389c35c..218cca9c6d 100644 --- a/mindspore/ccsrc/minddata/dataset/core/tensor.cc +++ b/mindspore/ccsrc/minddata/dataset/core/tensor.cc @@ -211,20 +211,17 @@ Status Tensor::CreateFromNpArray(const py::array &arr, std::shared_ptr * RETURN_IF_NOT_OK(CopyStridedArray((*out)->data_, data, shape, strides, (*out)->type_.SizeInBytes())); } else { // fix: memcpy_s will fail when byte_size > 2^31 - 1 - uint32_t step = 1; - while (byte_size > (step * kDeMaxDim)) { - int ret_code = - memcpy_s((*out)->data_ + (step - 1) * kDeMaxDim, kDeMaxDim, data + (step - 1) * kDeMaxDim, kDeMaxDim); + uint32_t step = 0; + while (byte_size >= kDeMaxDim) { + int ret_code = memcpy_s((*out)->data_ + step * kDeMaxDim, kDeMaxDim, data + step * kDeMaxDim, kDeMaxDim); if (ret_code != 0) { RETURN_STATUS_UNEXPECTED("Failed to copy data into Tensor."); } + byte_size -= kDeMaxDim; step++; } - - // copy the last - if (byte_size > ((step - 1) * kDeMaxDim) && byte_size <= (step * kDeMaxDim)) { - int ret_code = memcpy_s((*out)->data_ + (step - 1) * kDeMaxDim, byte_size - ((step - 1) * kDeMaxDim), - data + (step - 1) * kDeMaxDim, byte_size - ((step - 1) * kDeMaxDim)); + if (byte_size > 0) { + int ret_code = memcpy_s((*out)->data_ + step * kDeMaxDim, byte_size, data + step * kDeMaxDim, byte_size); if (ret_code != 0) { RETURN_STATUS_UNEXPECTED("Failed to copy data into Tensor."); }