diff --git a/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp b/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp index 1093928285ce8791ba7b9c649c830384cac56a04..15571aaab07989ffae230d3eb1db07043cf848a9 100644 --- a/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp +++ b/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp @@ -476,8 +476,15 @@ int32_t EncodeDataProcess::GetEncoderOutputBuffer(uint32_t index, MediaAVCodec:: size_t outputMemoDataSize = static_cast(info.size); CHECK_AND_RETURN_RET_LOG(buffer->GetBase() == nullptr, DCAMERA_BAD_OPERATE, "Sink point check failed: Source buffer base is null."); - CHECK_AND_RETURN_RET_LOG(outputMemoDataSize > buffer->GetSize(), DCAMERA_BAD_VALUE, - "Sink point check failed: outputMemoDataSize exceeds source allocated size."); + int64_t sourceAllocatedSize = buffer->GetSize(); + if (sourceAllocatedSize < 0) { + DHLOGE("Sink point check failed: buffer->GetSize() returned a negative error code."); + return DCAMERA_BAD_VALUE; + } + if (outputMemoDataSize > static_cast(sourceAllocatedSize)) { + DHLOGE("Sink point check failed: outputMemoDataSize exceeds source allocated size."); + return DCAMERA_BAD_VALUE; + } DHLOGD("Encoder output buffer size : %{public}zu", outputMemoDataSize); std::shared_ptr bufferOutput = std::make_shared(outputMemoDataSize); CHECK_AND_RETURN_RET_LOG(bufferOutput->Data() == nullptr, DCAMERA_MEMORY_OPT_ERROR,