diff --git a/frameworks/ets/ani/include/sts_notification_content.h b/frameworks/ets/ani/include/sts_notification_content.h index ba4656b72d4c82c0c2887698c043d78992c73fe4..34f73e559c17ea6c1945b7db82ff5acaa081b610 100644 --- a/frameworks/ets/ani/include/sts_notification_content.h +++ b/frameworks/ets/ani/include/sts_notification_content.h @@ -37,6 +37,8 @@ using LiveViewTypes = OHOS::Notification::NotificationLocalLiveViewContent::Live namespace OHOS { namespace NotificationSts { using namespace OHOS::Notification; +const uint32_t BUTTON_MAX_SIZE = 3; +const uint32_t CAPSULE_BTN_MAX_SIZE = 2; enum STSLiveViewStatus { LIVE_VIEW_CREATE = 0, @@ -66,8 +68,8 @@ bool WarpNotificationTime(ani_env *env, const NotificationTime &time, bool isIni ani_status UnWarpNotificationIconButton(ani_env *env, ani_object obj, NotificationIconButton &iconButton); ani_object WarpNotificationIconButton(ani_env *env, const NotificationIconButton &button); -ani_status GetIconButtonArray(ani_env *env, - ani_object param, const char *name, std::vector &res); +ani_status GetIconButtonArray(ani_env *env, ani_object param, const char *name, + std::vector &res, const uint32_t maxLen); ani_object GetAniIconButtonArray(ani_env *env, const std::vector buttons); void UnWarpNotificationLocalLiveViewButton(ani_env *env, ani_object obj, diff --git a/frameworks/ets/ani/src/sts_notification_content.cpp b/frameworks/ets/ani/src/sts_notification_content.cpp index 2e18fb8a433156f1a9bf84596916e9239a387860..7612bc0a9fcadac68629fcd48bf9dde5fb1cc30f 100644 --- a/frameworks/ets/ani/src/sts_notification_content.cpp +++ b/frameworks/ets/ani/src/sts_notification_content.cpp @@ -309,8 +309,8 @@ ani_status UnWarpNotificationIconButton(ani_env *env, ani_object obj, Notificati return status; } -ani_status GetIconButtonArray(ani_env *env, - ani_object param, const char *name, std::vector &res) +ani_status GetIconButtonArray(ani_env *env, ani_object param, const char *name, + std::vector &res, const uint32_t maxLen) { ANS_LOGD("GetIconButtonArray call"); if (env == nullptr || param == nullptr || name == nullptr) { @@ -333,6 +333,9 @@ ani_status GetIconButtonArray(ani_env *env, ANS_LOGE("status : %{public}d", status); return status; } + if (length > maxLen) { + length = static_cast(maxLen); + } for (int32_t i = 0; i < length; i++) { ani_ref buttonRef; status = env->Object_CallMethodByName_Ref(static_cast(arrayObj), @@ -466,7 +469,7 @@ bool getCapsuleByIcon(ani_env *env, ani_object obj, std::shared_ptr &p bool getCapsuleByButtons(ani_env *env, ani_object obj, std::vector &iconButtons) { - if (GetIconButtonArray(env, obj, "capsuleButtons", iconButtons) != ANI_OK) { + if (GetIconButtonArray(env, obj, "capsuleButtons", iconButtons, CAPSULE_BTN_MAX_SIZE) != ANI_OK) { ANS_LOGE("get capsuleButtons failed"); return false; } @@ -1057,7 +1060,7 @@ bool GetLocalLiveViewContentByOne(ani_env *env, ani_object obj, ANS_LOGD("GetLocalLiveViewContentByOne: get button failed"); } std::vector buttons = {}; - if (GetIconButtonArray(env, obj, "cardButtons", buttons) == ANI_OK) { + if (GetIconButtonArray(env, obj, "cardButtons", buttons, BUTTON_MAX_SIZE) == ANI_OK) { localLiveViewContent->SetCardButton(buttons); localLiveViewContent->addFlag(NotificationLocalLiveViewContent::LiveViewContentInner::CARD_BUTTON); } else {