From 104f8468256f7731a2b475dc74fc4cbdd2f21a9b Mon Sep 17 00:00:00 2001 From: yudechen Date: Thu, 11 Aug 2022 19:48:33 +0800 Subject: [PATCH 1/2] fix: EncodePrivateSyscap input null point should return true. Signed-off-by: yudechen Change-Id: I2ebf3fec0fd08a30763355f86ac7e35215016b61 --- interfaces/inner_api/syscap_interface.c | 3 ++- src/create_pcid.c | 4 ++-- test/unittest/common/syscap_codec_test.cpp | 5 ++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/interfaces/inner_api/syscap_interface.c b/interfaces/inner_api/syscap_interface.c index 14082ca..512b459 100644 --- a/interfaces/inner_api/syscap_interface.c +++ b/interfaces/inner_api/syscap_interface.c @@ -163,6 +163,7 @@ bool EncodePrivateSyscap(char **output, int *outputLen) *outputLen = bufferLen - PCID_MAIN_BYTES - 1; if (*outputLen == 0) { *output = outputStr; + (*outputLen)--; return true; } outputStr = (char *)malloc(*outputLen); @@ -246,7 +247,7 @@ bool DecodePrivateSyscap(char *input, char (**output)[SINGLE_SYSCAP_LEN], int *o if (input == NULL) { *output = outputArray; *outputCnt = syscapCnt; - return false; + return true; } while (*inputPos != '\0') { diff --git a/src/create_pcid.c b/src/create_pcid.c index 7926f93..ab48c8b 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -275,8 +275,8 @@ int32_t CreatePCID(char *inputFile, char *outDirPath) for (i = 0; i < privateCapSize; i++) { jsonArrayItem = cJSON_GetArrayItem(jsonPriSyscapObj, i); priSyscapStr = strchr(jsonArrayItem->valuestring, '.') + 1; - nRet = strcat_s(priSyscapHead, PRIVATE_SYSCAP_SIZE - 1, priSyscapStr); - nRet += strcat_s(priSyscapHead, PRIVATE_SYSCAP_SIZE - 1, ","); + nRet = strcat_s(priSyscapHead, allPriSyscapStrLen + 1, priSyscapStr); + nRet += strcat_s(priSyscapHead, allPriSyscapStrLen + 1, ","); if (nRet != EOK) { PRINT_ERR("strcat_s \"pri\" string is failed\n"); ret = -1; diff --git a/test/unittest/common/syscap_codec_test.cpp b/test/unittest/common/syscap_codec_test.cpp index bd388ea..b2b2054 100644 --- a/test/unittest/common/syscap_codec_test.cpp +++ b/test/unittest/common/syscap_codec_test.cpp @@ -49,6 +49,9 @@ HWTEST_F(SyscapCodecTest, EncodePrivateSyscap, TestSize.Level1) char *charPriInput = nullptr; int priOutLen; EXPECT_TRUE(EncodePrivateSyscap(&charPriInput, &priOutLen)); + // Currently, private syscap is null. + EXPECT_EQ(charPriInput, nullptr); + EXPECT_EQ(priOutLen, 0); free(charPriInput); } @@ -74,7 +77,7 @@ HWTEST_F(SyscapCodecTest, DecodeOsSyscap, TestSize.Level1) /* * @tc.name: DecodePrivateSyscap - * @tc.desc: Check the PrivateSyscap Decoding. + * @tc.desc: Check the null PrivateSyscap Decoding. * @tc.type: FUNC */ HWTEST_F(SyscapCodecTest, DecodePrivateSyscap, TestSize.Level1) -- Gitee From 45a3e6da5d757adce3c4982efed0db9fda35bebd Mon Sep 17 00:00:00 2001 From: yudechen Date: Mon, 15 Aug 2022 15:33:46 +0800 Subject: [PATCH 2/2] fix: EncodePrivateSyscap outputLen check. Change-Id: If099114c6137fffc181f66db2f868fe12083dfc8 Signed-off-by: yudechen --- interfaces/inner_api/syscap_interface.c | 20 ++++++++++---------- test/unittest/common/syscap_codec_test.cpp | 6 +++--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/interfaces/inner_api/syscap_interface.c b/interfaces/inner_api/syscap_interface.c index 512b459..1d5c618 100644 --- a/interfaces/inner_api/syscap_interface.c +++ b/interfaces/inner_api/syscap_interface.c @@ -14,6 +14,7 @@ */ #include +#include #include #include #include @@ -160,21 +161,19 @@ bool EncodePrivateSyscap(char **output, int *outputLen) return false; } - *outputLen = bufferLen - PCID_MAIN_BYTES - 1; - if (*outputLen == 0) { - *output = outputStr; - (*outputLen)--; - return true; + int priLen = bufferLen - PCID_MAIN_BYTES - 1; + if (priLen <= 0) { + *outputLen = 0; + return false; } - outputStr = (char *)malloc(*outputLen); + outputStr = (char *)calloc(priLen, sizeof(char)); if (outputStr == NULL) { - PRINT_ERR("malloc buffer failed, size = %d, errno = %d\n", *outputLen, errno); + PRINT_ERR("malloc buffer failed, size = %d, errno = %d\n", priLen, errno); *outputLen = 0; return false; } - (void)memset_s(outputStr, *outputLen, 0, *outputLen); - ret = strncpy_s(outputStr, *outputLen, contextBuffer + PCID_MAIN_BYTES, *outputLen - 1); + ret = strncpy_s(outputStr, priLen, contextBuffer + PCID_MAIN_BYTES, priLen - 1); if (ret != 0) { PRINT_ERR("strcpy_s failed."); FreeContextBuffer(contextBuffer); @@ -184,6 +183,7 @@ bool EncodePrivateSyscap(char **output, int *outputLen) } FreeContextBuffer(contextBuffer); + *outputLen = strlen(outputStr); *output = outputStr; return true; } @@ -247,7 +247,7 @@ bool DecodePrivateSyscap(char *input, char (**output)[SINGLE_SYSCAP_LEN], int *o if (input == NULL) { *output = outputArray; *outputCnt = syscapCnt; - return true; + return false; } while (*inputPos != '\0') { diff --git a/test/unittest/common/syscap_codec_test.cpp b/test/unittest/common/syscap_codec_test.cpp index b2b2054..7b9a0eb 100644 --- a/test/unittest/common/syscap_codec_test.cpp +++ b/test/unittest/common/syscap_codec_test.cpp @@ -50,7 +50,7 @@ HWTEST_F(SyscapCodecTest, EncodePrivateSyscap, TestSize.Level1) int priOutLen; EXPECT_TRUE(EncodePrivateSyscap(&charPriInput, &priOutLen)); // Currently, private syscap is null. - EXPECT_EQ(charPriInput, nullptr); + EXPECT_EQ(*charPriInput, '\0'); EXPECT_EQ(priOutLen, 0); free(charPriInput); } @@ -137,8 +137,8 @@ HWTEST_F(SyscapCodecTest, ComparePcidString, TestSize.Level1) const char rpcidString[] = "33588992,1766370052,65536,276824064,0,0,0,0,0,0,"\ "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\ "SystemCapability.vendor.xxxxx1,SystemCapability.device.xxxxx2"; - const char expect[][256] = {"SystemCapability.Graphic.Wms", - "SystemCapability.HiviewDFX.HiLog", + const char expect[][256] = {"SystemCapability.Graphic.UI", + "SystemCapability.HiviewDFX.HiDumper", "SystemCapability.vendor.xxxxx1", "SystemCapability.device.xxxxx2"}; int32_t ret = ComparePcidString(pcidString, rpcidString, &result); -- Gitee