From 19beb875529dca9ae41c657a4ec6b56f33052d3e Mon Sep 17 00:00:00 2001 From: jonyguo Date: Tue, 30 Mar 2021 19:48:26 +0800 Subject: [PATCH] fix: memcpy_s will fail when size is larger than 2^31 - 1 --- .../ccsrc/minddata/dataset/core/tensor.cc | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/mindspore/ccsrc/minddata/dataset/core/tensor.cc b/mindspore/ccsrc/minddata/dataset/core/tensor.cc index a4cdf18874..6d3389c35c 100644 --- a/mindspore/ccsrc/minddata/dataset/core/tensor.cc +++ b/mindspore/ccsrc/minddata/dataset/core/tensor.cc @@ -210,9 +210,24 @@ Status Tensor::CreateFromNpArray(const py::array &arr, std::shared_ptr * if (is_strided) { RETURN_IF_NOT_OK(CopyStridedArray((*out)->data_, data, shape, strides, (*out)->type_.SizeInBytes())); } else { - int ret_code = memcpy_s((*out)->data_, byte_size, data, byte_size); - if (ret_code != 0) { - RETURN_STATUS_UNEXPECTED("Failed to copy data into Tensor."); + // 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); + if (ret_code != 0) { + RETURN_STATUS_UNEXPECTED("Failed to copy data into Tensor."); + } + 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 (ret_code != 0) { + RETURN_STATUS_UNEXPECTED("Failed to copy data into Tensor."); + } } }