diff --git a/frameworks/native/src/battery_stats_info.cpp b/frameworks/native/src/battery_stats_info.cpp index f0755cb47638106c6ddfedea8632cd27aaa210fa..4a484f260e3e4d6896782e385b00e4518c1d9920 100755 --- a/frameworks/native/src/battery_stats_info.cpp +++ b/frameworks/native/src/battery_stats_info.cpp @@ -226,15 +226,16 @@ bool ParcelableBatteryStatsList::Marshalling(Parcel& parcel) const ParcelableBatteryStatsList* ParcelableBatteryStatsList::Unmarshalling(Parcel& parcel) { + constexpr int32_t PARAM_ZERO = 0; auto listPtr = std::make_unique(); int32_t size = parcel.ReadInt32(); - if (size > PARAM_MAX_NUM) { - STATS_HILOGE(COMP_FWK, "size exceed limit, size=%{public}d", size); + if (size < PARAM_ZERO || size > PARAM_MAX_NUM) { + STATS_HILOGE(COMP_FWK, "size is invalid, size=%{public}d", size); return nullptr; } - for (int32_t i = 0; i < size; ++i) { + for (int32_t i = PARAM_ZERO; i < size; ++i) { auto info = std::make_shared(); info->ReadFromParcel(parcel); listPtr->statsList_.emplace_back(info); diff --git a/test/unittest/src/servicetest/stats_service_stub_test.cpp b/test/unittest/src/servicetest/stats_service_stub_test.cpp index 25c4aac6bbe1031e03bdf104e4c7c98f83c452c4..364542b193737ee7f4184685913ce764e56b985a 100644 --- a/test/unittest/src/servicetest/stats_service_stub_test.cpp +++ b/test/unittest/src/servicetest/stats_service_stub_test.cpp @@ -151,4 +151,48 @@ HWTEST_F (StatsServiceStubTest, StatsServiceStubTest_005, TestSize.Level0) STATS_HILOGI(LABEL_TEST, "StatsServiceStubTest_005 end."); } + +/** + * @tc.name: StatsServiceStubTest_006 + * @tc.desc: test GetBatteryStats + * @tc.type: FUNC + * @tc.require: issueI6ARNA + */ +HWTEST_F (StatsServiceStubTest, StatsServiceStubTest_006, TestSize.Level0) +{ + STATS_HILOGI(LABEL_TEST, "StatsServiceStubTest_006 start."); + MessageParcel data; + Parcel reply; + MessageOption option; + sptr statsService = BatteryStatsService::GetInstance(); + sptr statsStub = static_cast>(statsService); + data.WriteInterfaceToken(BatteryStatsProxy::GetDescriptor()); + const int32_t PARAM_ZERO = 0; + reply.WriteInt32(PARAM_ZERO); + ParcelableBatteryStatsList* result = ParcelableBatteryStatsList::Unmarshalling(reply); + EXPECT_NE(result, nullptr); + STATS_HILOGI(LABEL_TEST, "StatsServiceStubTest_006 end."); +} + +/** + * @tc.name: StatsServiceStubTest_007 + * @tc.desc: test GetBatteryStats + * @tc.type: FUNC + * @tc.require: issueI6ARNA + */ +HWTEST_F (StatsServiceStubTest, StatsServiceStubTest_007, TestSize.Level0) +{ + STATS_HILOGI(LABEL_TEST, "StatsServiceStubTest_007 start."); + MessageParcel data; + Parcel reply; + MessageOption option; + sptr statsService = BatteryStatsService::GetInstance(); + sptr statsStub = static_cast>(statsService); + data.WriteInterfaceToken(BatteryStatsProxy::GetDescriptor()); + const int32_t PARAM_MINUS_ONE = -1; + reply.WriteInt32(PARAM_MINUS_ONE); + ParcelableBatteryStatsList* result = ParcelableBatteryStatsList::Unmarshalling(reply); + EXPECT_EQ(result, nullptr); + STATS_HILOGI(LABEL_TEST, "StatsServiceStubTest_007 end."); +} } \ No newline at end of file