diff --git a/frameworks/cj/ffi/src/notification_manager_impl.cpp b/frameworks/cj/ffi/src/notification_manager_impl.cpp index 52edf5d82c5a16ff5c73ddf8099f960b8fe1642b..9628b2f0371f09fac448fb78c40c9812978b2461 100644 --- a/frameworks/cj/ffi/src/notification_manager_impl.cpp +++ b/frameworks/cj/ffi/src/notification_manager_impl.cpp @@ -205,11 +205,10 @@ namespace CJSystemapi { head = nullptr; break; } - if (!SetNotificationRequestV2(vec.GetRefPtr(), *(head[count]))) { + if (!SetNotificationRequestV2(vec.GetRefPtr(), *(head[count++]))) { LOGI("Set NotificationRequest object failed"); continue; } - count++; } notificationRequests.head = head; return notificationRequests; diff --git a/frameworks/cj/ffi/src/notification_utils.cpp b/frameworks/cj/ffi/src/notification_utils.cpp index 6da22c8ab154ffce15c11a755aed07e2fa919d4a..20bfc0fa1af0bf8f568e778e06ae31715b011c37 100644 --- a/frameworks/cj/ffi/src/notification_utils.cpp +++ b/frameworks/cj/ffi/src/notification_utils.cpp @@ -34,6 +34,18 @@ namespace Notification { } return std::char_traits::copy(res, origin.c_str(), len); } + void freeCArrString(CArrString& arrStr) + { + if (arrStr.head == nullptr) { + return; + } + for (int64_t i = 0; i < arrStr.size; i++) { + free(arrStr.head[i]); + } + free(arrStr.head); + arrStr.head = nullptr; + arrStr.size = 0; + } bool GetNotificationSupportDisplayDevicesV2( CDistributedOptionsV2* distributedOption, @@ -1350,14 +1362,13 @@ namespace Notification { return false; } for (auto vec : iconsVec) { - if (!vec) { - continue; - } // buttonIcon auto native = FFIData::Create(vec); if (native == nullptr) { LOGE("Invalid object pixelMap of buttonIcons."); - return false; // memory free at cj + free(icons.head); + freeCArrString(cButton.names); + return false; } icons.head[iconCount++] = native->GetID(); }