已关闭
AI检视安全问题修复 #551
AI检视安全问题修复 #551
已关闭
harmonyosgogogo创建于 8月5日关闭于 10月1日
共 4 个文件变更+43-19
@@ -104,7 +104,7 @@ void WfdRtpConsumer::UpdateOperation(ProsumerStatusMsg::Ptr &statusMsg)
104 if (Init()) {104 if (Init()) {
105 statusMsg->status = PROSUMER_NOTIFY_INIT_SUCCESS;105 statusMsg->status = PROSUMER_NOTIFY_INIT_SUCCESS;
106 } else {106 } else {
107- statusMsg->status = PROSUMER_NOTIFY_INIT_SUCCESS;107+ statusMsg->status = PROSUMER_NOTIFY_ERROR;
108 statusMsg->errorCode = ERR_PROSUMER_CREATE;108 statusMsg->errorCode = ERR_PROSUMER_CREATE;
109 }109 }
110 break;110 break;
@@ -150,6 +150,10 @@ bool WfdRtpConsumer::Init()
150bool WfdRtpConsumer::Start()150bool WfdRtpConsumer::Start()
151{151{
152 SHARING_LOGD("trace.");152 SHARING_LOGD("trace.");
153+ if (isRunning_) {
154+ SHARING_LOGW("consumer already running");
155+ return true;
156+ }
153 if (!StartNetworkServer(port_, rtpServer_.second, rtpServer_.first)) {157 if (!StartNetworkServer(port_, rtpServer_.second, rtpServer_.first)) {
154 SHARING_LOGE("start rtp server port: %{public}d failed.", port_);158 SHARING_LOGE("start rtp server port: %{public}d failed.", port_);
155 return false;159 return false;
@@ -181,13 +185,14 @@ int32_t WfdRtpConsumer::Release()
181{185{
182 SHARING_LOGD("WFDRtpConsumerId: %{public}u.", GetId());186 SHARING_LOGD("WFDRtpConsumerId: %{public}u.", GetId());
183 auto end = std::chrono::steady_clock::now();187 auto end = std::chrono::steady_clock::now();
184- std::chrono::duration<double, std::milli> diff = end - gopInterval_;188+ std::chrono::duration<double, std::milli> diff = end - gopInterval_.load();
185 189 
186- if (frameNums_ > 0) {190+ int32_t frameNums = frameNums_.load();
191+ if (frameNums > 0) {
187 SHARING_LOGD(192 SHARING_LOGD(
188 "TEST STATISTIC Miracast:finish, interval:%{public}.0f ms, agent ID:%{public}d, "193 "TEST STATISTIC Miracast:finish, interval:%{public}.0f ms, agent ID:%{public}d, "
189 "get video frame, gop:%{public}d, average receiving frames time:%{public}.0f ms.",194 "get video frame, gop:%{public}d, average receiving frames time:%{public}.0f ms.",
190- diff.count(), GetSinkAgentId(), frameNums_, diff.count() / frameNums_);195+ diff.count(), GetSinkAgentId(), frameNums, diff.count() / frameNums);
191 }196 }
192 Stop();197 Stop();
193 return 0;198 return 0;
@@ -258,25 +263,26 @@ void WfdRtpConsumer::HandlePpsUpdate(std::shared_ptr<BufferDispatcher> dispatche
258 263 
259void WfdRtpConsumer::HandleVideoKeyFrame()264void WfdRtpConsumer::HandleVideoKeyFrame()
260{265{
261- if (isFirstKeyFrame_) {266+ if (isFirstKeyFrame_.load()) {
262 MEDIA_LOGD("TEST STATISTICS Miracast:first, agent ID:%{public}d, get video frame.", GetSinkAgentId());267 MEDIA_LOGD("TEST STATISTICS Miracast:first, agent ID:%{public}d, get video frame.", GetSinkAgentId());
263 WfdSinkHiSysEvent::GetInstance().FirstSceneEndReport(__func__, "",268 WfdSinkHiSysEvent::GetInstance().FirstSceneEndReport(__func__, "",
264 SinkStage::FIRST_FRAME_PROCESSED, SinkStageRes::SUCCESS);269 SinkStage::FIRST_FRAME_PROCESSED, SinkStageRes::SUCCESS);
265 WfdSinkHiSysEvent::GetInstance().ChangeHisysEventScene(SinkBizScene::MIRRORING_STABILITY);270 WfdSinkHiSysEvent::GetInstance().ChangeHisysEventScene(SinkBizScene::MIRRORING_STABILITY);
266- isFirstKeyFrame_ = false;271+ isFirstKeyFrame_.store(false);
267 } else {272 } else {
268 auto end = std::chrono::steady_clock::now();273 auto end = std::chrono::steady_clock::now();
269- std::chrono::duration<double, std::milli> diff = end - gopInterval_;274+ std::chrono::duration<double, std::milli> diff = end - gopInterval_.load();
270- if (frameNums_ > 0) {275+ int32_t frameNums = frameNums_.load();
276+ if (frameNums > 0) {
271 MEDIA_LOGD("TEST STATISTIC Miracast:interval:%{public}.0f ms, "277 MEDIA_LOGD("TEST STATISTIC Miracast:interval:%{public}.0f ms, "
272 "agent ID:%{public}d, get video frame, gop:%{public}d, "278 "agent ID:%{public}d, get video frame, gop:%{public}d, "
273 "average receiving frames time:%{public}.0f ms.",279 "average receiving frames time:%{public}.0f ms.",
274- diff.count(), GetSinkAgentId(), frameNums_, diff.count() / frameNums_);280+ diff.count(), GetSinkAgentId(), frameNums, diff.count() / frameNums);
275 }281 }
276 }282 }
277 283 
278- frameNums_ = 1;284+ frameNums_.store(1);
279- gopInterval_ = std::chrono::steady_clock::now();285+ gopInterval_.store(std::chrono::steady_clock::now());
280}286}
281 287 
282void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame)288void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame)
@@ -315,6 +321,10 @@ void WfdRtpConsumer::OnRtpUnpackCallback(uint32_t ssrc, const Frame::Ptr &frame)
315 MEDIA_LOGE("data size too small: %{public}d.", frame->Size());321 MEDIA_LOGE("data size too small: %{public}d.", frame->Size());
316 return;322 return;
317 }323 }
324+ if ((p + 2) == nullptr) {
325+ MEDIA_LOGE("invalid data ptr");
326+ return;
327+ }
318 p = *(p + 2) == 0x01 ? p + 3 : p + 4; // 2: fix offset, 3: fix offset, 4: fix offset328 p = *(p + 2) == 0x01 ? p + 3 : p + 4; // 2: fix offset, 3: fix offset, 4: fix offset
319 if (((p[0]) & 0x1f) == 0x01) {329 if (((p[0]) & 0x1f) == 0x01) {
320 mediaData = std::make_shared<MediaData>();330 mediaData = std::make_shared<MediaData>();
@@ -387,6 +397,7 @@ bool WfdRtpConsumer::StartNetworkServer(uint16_t port, NetworkFactory::ServerPtr
387 SHARING_LOGD("trace.");397 SHARING_LOGD("trace.");
388 if (localIp_.empty()) {398 if (localIp_.empty()) {
389 SHARING_LOGE("local Ip empty");399 SHARING_LOGE("local Ip empty");
400+ return false;
390 }401 }
391 402 
392 if (!NetworkFactory::CreateUdpServer(port, localIp_, shared_from_this(), server)) {403 if (!NetworkFactory::CreateUdpServer(port, localIp_, shared_from_this(), server)) {
@@ -77,14 +77,14 @@ private:
77 77 
78private:78private:
79 bool isFirstPacket_ = true;79 bool isFirstPacket_ = true;
80- bool isFirstKeyFrame_ = true;80+ std::atomic<bool> isFirstKeyFrame_ = true;
81 81 
82 uint16_t port_ = 0;82 uint16_t port_ = 0;
83 std::string localIp_;83 std::string localIp_;
84- int32_t frameNums_ = 1;84+ std::atomic<int32_t> frameNums_ = 1;
85 uint32_t contextId_ = 0;85 uint32_t contextId_ = 0;
86 86 
87- std::chrono::steady_clock::time_point gopInterval_;87+ std::atomic<std::chrono::steady_clock::time_point> gopInterval_;
88 std::pair<int32_t, NetworkFactory::ServerPtr> rtpServer_ = {0, nullptr};88 std::pair<int32_t, NetworkFactory::ServerPtr> rtpServer_ = {0, nullptr};
89 89 
90 std::atomic<int> mediaTypePaused_ = MEDIA_TYPE_AV;90 std::atomic<int> mediaTypePaused_ = MEDIA_TYPE_AV;
@@ -114,8 +114,8 @@ void AudioPlayer::ProcessAudioData(DataBuffer::Ptr data, uint64_t pts)
114 if (!isRunning_) {114 if (!isRunning_) {
115 return;115 return;
116 }116 }
117- 117+ std::shared_ptr<AudioDecoder> audioDecoder = audioDecoder_;
118- if (data == nullptr || audioDecoder_ == nullptr || data->Peek() == nullptr || data->Size() <= 0) {118+ if (data == nullptr || audioDecoder == nullptr || data->Peek() == nullptr || data->Size() <= 0) {
119 return;119 return;
120 }120 }
121 121 
@@ -123,13 +123,14 @@ void AudioPlayer::ProcessAudioData(DataBuffer::Ptr data, uint64_t pts)
123 frame->codecId_ = audioCodecId_;123 frame->codecId_ = audioCodecId_;
124 frame->Assign(data->Peek(), data->Size());124 frame->Assign(data->Peek(), data->Size());
125 frame->pts_ = pts;125 frame->pts_ = pts;
126- audioDecoder_->OnFrame(frame);126+ audioDecoder->OnFrame(frame);
127}127}
128 128 
129int64_t AudioPlayer::GetDecoderTimestamp()129int64_t AudioPlayer::GetDecoderTimestamp()
130{130{
131- if (audioDecoder_) {131+ std::shared_ptr<AudioDecoder> audioDecoder = audioDecoder_;
132- return audioDecoder_->GetDecoderTimestamp();132+ if (audioDecoder) {
133+ return audioDecoder->GetDecoderTimestamp();
133 }134 }
134 return 0;135 return 0;
135}136}
@@ -60,6 +60,10 @@ bool VideoPlayController::Init(VideoTrack &videoTrack)
60 SharingValue::Ptr values = nullptr;60 SharingValue::Ptr values = nullptr;
61 auto ret = Config::GetInstance().GetConfig("codec", "forceSWDecoder", "isEnable", values);61 auto ret = Config::GetInstance().GetConfig("codec", "forceSWDecoder", "isEnable", values);
62 if (ret == CONFIGURE_ERROR_NONE) {62 if (ret == CONFIGURE_ERROR_NONE) {
63+ if (!values->IsBool()) {
64+ SHARING_LOGE("isEnable not bool");
65+ return false;
66+ }
63 bool value;67 bool value;
64 values->GetValue<bool>(value);68 values->GetValue<bool>(value);
65 forceSWDecoder_ = static_cast<bool>(value);69 forceSWDecoder_ = static_cast<bool>(value);
@@ -124,6 +128,10 @@ bool VideoPlayController::SetSurface(sptr<Surface> surface, bool keyFrame)
124bool VideoPlayController::Start(BufferDispatcher::Ptr &dispatcher)128bool VideoPlayController::Start(BufferDispatcher::Ptr &dispatcher)
125{129{
126 SHARING_LOGD("trace.");130 SHARING_LOGD("trace.");
131+ if (dispatcher == nullptr) {
132+ SHARING_LOGE("video play start failed, dispatcher null");
133+ return false;
134+ }
127 if (isVideoRunning_) {135 if (isVideoRunning_) {
128 SHARING_LOGW("video play is running.");136 SHARING_LOGW("video play is running.");
129 return true;137 return true;
@@ -326,6 +334,10 @@ void VideoPlayController::OnError(int32_t errorCode)
326 334 
327int32_t VideoPlayController::RenderInCopyMode(DataBuffer::Ptr decodedData)335int32_t VideoPlayController::RenderInCopyMode(DataBuffer::Ptr decodedData)
328{336{
337+ if (decodedData == nullptr) {
338+ SHARING_LOGE("decodedData null");
339+ return false;
340+ }
329 SHARING_LOGD("Render begin.");341 SHARING_LOGD("Render begin.");
330 sptr<SurfaceBuffer> buffer;342 sptr<SurfaceBuffer> buffer;
331 int32_t releaseFence = -1;343 int32_t releaseFence = -1;