From 595b84b8cccc073a856c54fbeaf2c31b95de0481 Mon Sep 17 00:00:00 2001 From: lichao Date: Tue, 23 Apr 2024 11:49:36 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=BC=96=E7=A0=81=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lichao --- src/create_pcid.c | 32 ++++++++++++++++---------------- src/main.c | 3 ++- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/create_pcid.c b/src/create_pcid.c index da181d8..7ada1bf 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -222,7 +222,7 @@ static int32_t CheckConvertedContextSaveAsFile(char *outDirPath, PCIDMain *pcidB } static int32_t FreeAfterCreatePCID(PCIDMain *pcidBuffer, cJSON *allOsSyscapObj, char *contextBuffer, - int32_t type, int32_t ret) + int32_t type, int32_t ret) { if (type == FREE_CREATE_PCID_BUFFER_OUT) { free(pcidBuffer); @@ -232,6 +232,13 @@ static int32_t FreeAfterCreatePCID(PCIDMain *pcidBuffer, cJSON *allOsSyscapObj, return ret; } +static int32_t PreFreeAfterCreatePCID(PCIDMain *pcidBuffer, cJSON *allOsSyscapObj, cJSON *jsonRootObj, + char *contextBuffer, int32_t type) +{ + cJSON_Delete(jsonRootObj); + return FreeAfterCreatePCID(pcidBuffer, allOsSyscapObj, contextBuffer, type, -1); +} + int32_t CreatePCID(char *inputFile, char *outDirPath) { uint32_t privateCapSize, osCapSize; @@ -248,37 +255,33 @@ int32_t CreatePCID(char *inputFile, char *outDirPath) cJSON *jsonRootObj = cJSON_ParseWithLength(contextBuffer, contextBufLen); if (jsonRootObj == NULL) { PRINT_ERR("cJSON_Parse failed, context buffer is:\n%s\n", contextBuffer); - return FreeAfterCreatePCID(NULL, allOsSyscapObj, contextBuffer, 0, -1); + return PreFreeAfterCreatePCID(NULL, allOsSyscapObj, jsonRootObj, contextBuffer, 0); } cJSON *jsonSyscapObj = cJSON_GetObjectItem(jsonRootObj, "syscap"); if (jsonSyscapObj == NULL || !cJSON_IsObject(jsonSyscapObj)) { PRINT_ERR("get \"syscap\" object failed\n"); - cJSON_Delete(jsonRootObj); - return FreeAfterCreatePCID(NULL, allOsSyscapObj, contextBuffer, 0, -1); + return PreFreeAfterCreatePCID(NULL, allOsSyscapObj, jsonRootObj, contextBuffer, 0); } cJSON *jsonOsSyscapObj = cJSON_GetObjectItem(jsonSyscapObj, "os"); cJSON *jsonPriSyscapObj = cJSON_GetObjectItem(jsonSyscapObj, "private"); ret = GetOsAndPriSyscapSize(jsonOsSyscapObj, jsonPriSyscapObj, &osCapSize, &privateCapSize); if (ret != 0) { - cJSON_Delete(jsonRootObj); - return FreeAfterCreatePCID(NULL, allOsSyscapObj, contextBuffer, 0, ret); + return PreFreeAfterCreatePCID(NULL, allOsSyscapObj, jsonRootObj, contextBuffer, 0); } uint16_t allPriSyscapStrLen = 0; ret = GetPriSyscapLen(privateCapSize, jsonPriSyscapObj, &allPriSyscapStrLen); if (ret != 0) { - cJSON_Delete(jsonRootObj); - return FreeAfterCreatePCID(NULL, allOsSyscapObj, contextBuffer, 0, ret); + return PreFreeAfterCreatePCID(NULL, allOsSyscapObj, jsonRootObj, contextBuffer, 0); } uint16_t pcidLength = sizeof(PCIDMain) + allPriSyscapStrLen + 1; PCIDMain *pcidBuffer = (PCIDMain *)malloc(pcidLength); if (pcidBuffer == NULL) { PRINT_ERR("malloc for pcid buffer failed\n"); - cJSON_Delete(jsonRootObj); - return FreeAfterCreatePCID(NULL, allOsSyscapObj, contextBuffer, 0, -1); + return PreFreeAfterCreatePCID(NULL, allOsSyscapObj, jsonRootObj, contextBuffer, 0); } (void)memset_s(pcidBuffer, pcidLength, 0, pcidLength); @@ -286,8 +289,8 @@ int32_t CreatePCID(char *inputFile, char *outDirPath) ret += SetPriSyscap(pcidBuffer, jsonPriSyscapObj, privateCapSize, allPriSyscapStrLen); ret += SetPCIDHeader(pcidBuffer, jsonRootObj); if (ret != 0) { - cJSON_Delete(jsonRootObj); - return FreeAfterCreatePCID(pcidBuffer, allOsSyscapObj, contextBuffer, FREE_CREATE_PCID_BUFFER_OUT, ret); + return PreFreeAfterCreatePCID(pcidBuffer, allOsSyscapObj, jsonRootObj, contextBuffer, + FREE_CREATE_PCID_BUFFER_OUT); } ret = CheckConvertedContextSaveAsFile(outDirPath, pcidBuffer, pcidLength, ret); @@ -708,22 +711,18 @@ int32_t DecodeStringPCIDToJson(char *input, char *outDirPath) cJSON *rootObj = cJSON_CreateObject(); if (!cJSON_AddItemToObject(rootObj, "syscap", sysCapObj)) { PRINT_ERR("Add syscap to json failed.\n"); - cJSON_Delete(sysCapObj); goto ADD_JSON_FAILED; } if (AddHeaderToJsonObj(pcidHeader, PCID_HEADER, rootObj) != 0) { PRINT_ERR("Add header to json object failed.\n"); - cJSON_Delete(sysCapObj); goto ADD_JSON_FAILED; } if (AddOsSyscapToJsonObj(osSyscap, OS_SYSCAP_NUM, sysCapObj) != 0) { PRINT_ERR("Add os syscap json object failed.\n"); - cJSON_Delete(sysCapObj); goto ADD_JSON_FAILED; } if (AddPriSyscapToJsonObj(priSyscapStr, (uint32_t)strlen(priSyscapStr), sysCapObj) != 0) { PRINT_ERR("Add private syscap json object failed.\n"); - cJSON_Delete(sysCapObj); goto ADD_JSON_FAILED; } // save as json file @@ -739,6 +738,7 @@ int32_t DecodeStringPCIDToJson(char *input, char *outDirPath) SAVE_FAILED: free(jsonBuffer); ADD_JSON_FAILED: + cJSON_Delete(sysCapObj); cJSON_Delete(rootObj); PARSE_FAILED: free(ctx); diff --git a/src/main.c b/src/main.c index 47a7769..388dc1d 100644 --- a/src/main.c +++ b/src/main.c @@ -131,7 +131,8 @@ int32_t OperateByBitMap(char *const *argv, uint16_t bitMap, char *outputpath) PRINT_ERR("Input file too few or too many.\n"); return -1; } else { - (void)OutputVersion(argv[optind], optind); break; + (void)OutputVersion(argv[optind], optind); + break; } default: (void)OutputHelp(); -- Gitee From 5c780087a3810a08a3dfce53f5443d1a3b6b194d Mon Sep 17 00:00:00 2001 From: lichao Date: Tue, 23 Apr 2024 15:40:14 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=BC=96=E7=A0=81=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lichao --- src/create_pcid.c | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/create_pcid.c b/src/create_pcid.c index 7ada1bf..50e7844 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -687,24 +687,32 @@ static int32_t AddPriSyscapToJsonObj(char *priSyscapString, uint32_t priSyscapSt return 0; } -int32_t DecodeStringPCIDToJson(char *input, char *outDirPath) -{ - int32_t ret = -1; - uint32_t osSyscap[OS_SYSCAP_NUM] = {0}; - uint32_t pcidHeader[PCID_HEADER]; - uint32_t fileContextLen; +int32_t GetSyscapStr(char *input, char const *priSyscapStr, uint32_t* osSyscap, uint32_t *pcidHeader) { char *ctx = NULL; - char *priSyscapStr = NULL; - + uint32_t fileContextLen; if (GetFileContext(input, &ctx, (uint32_t *)&fileContextLen) != 0) { PRINT_ERR("GetFileContext failed, input file : %s\n", input); - goto PARSE_FAILED; + return -1; } if (ParseStringSyscap(ctx, osSyscap, OS_SYSCAP_NUM, pcidHeader, PCID_HEADER) != 0) { PRINT_ERR("Parse string syscap failed.\n"); - goto PARSE_FAILED; + return -1; } priSyscapStr = ctx; + free(ctx); + return 0; +} + +int32_t DecodeStringPCIDToJson(char *input, char *outDirPath) +{ + int32_t ret = -1; + uint32_t osSyscap[OS_SYSCAP_NUM] = {0}; + uint32_t pcidHeader[PCID_HEADER]; + char *priSyscapStr = NULL; + ret = GetSyscapStr(input, priSyscapStr, osSyscap, pcidHeader); + if (ret == -1) { + return ret; + } // add to json object cJSON *sysCapObj = cJSON_CreateObject(); @@ -740,8 +748,6 @@ SAVE_FAILED: ADD_JSON_FAILED: cJSON_Delete(sysCapObj); cJSON_Delete(rootObj); -PARSE_FAILED: - free(ctx); return ret; } -- Gitee From 1d439fdd17b90852b49eb3560fd25132a8fb2fdc Mon Sep 17 00:00:00 2001 From: lichao Date: Fri, 26 Apr 2024 15:18:11 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=BC=96=E7=A0=81=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lichao --- interfaces/inner_api/syscap_interface.c | 7 +++--- src/create_pcid.c | 32 +++++++++++++++---------- src/syscap_tool.c | 3 ++- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/interfaces/inner_api/syscap_interface.c b/interfaces/inner_api/syscap_interface.c index 9e1dff5..1a70a96 100644 --- a/interfaces/inner_api/syscap_interface.c +++ b/interfaces/inner_api/syscap_interface.c @@ -246,7 +246,6 @@ bool DecodePrivateSyscap(char *input, char (**output)[SINGLE_SYSCAP_LEN], int *o *bufferPos = '\0'; if (sprintf_s(*outputArray, SINGLE_SYSCAP_LEN, "SystemCapability.%s", buffer) == -1) { free(outputArray); - free(output); return false; } bufferPos = buffer; @@ -330,23 +329,23 @@ FREE_SYSCAP_OUT: static int32_t TransStringFormatAndSaveSyscap(struct FreeAfterDecodeRpcidInfo freeAfterDecodeRpcidInfo, cJSON *sysCapArray, const char *inputFile) { - int32_t ret = -1; // trans to string format sysCapArray = cJSON_GetObjectItem(freeAfterDecodeRpcidInfo.rpcidRoot, "syscap"); if (sysCapArray == NULL || !cJSON_IsArray(sysCapArray)) { PRINT_ERR("Get syscap failed. Input file: %s\n", inputFile); - return ret; + return -1; } freeAfterDecodeRpcidInfo.sysCapArraySize = cJSON_GetArraySize(sysCapArray); if (freeAfterDecodeRpcidInfo.sysCapArraySize < 0) { PRINT_ERR("Get syscap size failed. Input file: %s\n", inputFile); - return ret; + return -1; } // malloc for save os syscap index freeAfterDecodeRpcidInfo.osSysCapIndex = (uint16_t *)malloc(sizeof(uint16_t) * freeAfterDecodeRpcidInfo.sysCapArraySize); if (freeAfterDecodeRpcidInfo.osSysCapIndex == NULL) { PRINT_ERR("malloc failed.\n"); + return -1; } free(freeAfterDecodeRpcidInfo.osSysCapIndex); return 0; diff --git a/src/create_pcid.c b/src/create_pcid.c index 50e7844..6929741 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -345,6 +345,12 @@ int32_t GetOsSyscap(PCIDMain *pcidMain, cJSON *sysCapObject) return 0; } +int32_t GetPriSyscapResult(cJSON* capVectorPtr, int32_t ret) +{ + cJSON_Delete(capVectorPtr); + return ret; +} + int32_t GetPriSyscap(PCIDMain *pcidMain, cJSON *sysCapObject, size_t contextBufLen) { cJSON *capVectorPtr = cJSON_CreateArray(); @@ -355,16 +361,15 @@ int32_t GetPriSyscap(PCIDMain *pcidMain, cJSON *sysCapObject, size_t contextBufL if (contextBufLen < 0 || contextBufLen > UINT32_MAX) { PRINT_ERR("the data privateSyscapLen is out of scope."); - return -1; + return GetPriSyscapResult(capVectorPtr, -1); } int32_t privateSyscapLen = (int32_t)(contextBufLen - sizeof(PCIDMain) - 1); - if (privateSyscapLen < 0) { + if (privateSyscapLen < 0 || privateSyscapLen > INT32_MAX) { PRINT_ERR("parse private syscap failed."); - return -1; + return GetPriSyscapResult(capVectorPtr, -1); } else if (privateSyscapLen == 0) { - cJSON_Delete(capVectorPtr); - return 0; + return GetPriSyscapResult(capVectorPtr, 0); } char fullCapStr[SINGLE_SYSCAP_LEN] = {0}; @@ -377,13 +382,11 @@ int32_t GetPriSyscap(PCIDMain *pcidMain, cJSON *sysCapObject, size_t contextBufL int32_t ret = sprintf_s(fullCapStr, SINGLE_SYSCAP_LEN, "SystemCapability.%s", priSyscapStr); if (ret == -1) { printf("sprintf_s failed\n"); - cJSON_Delete(capVectorPtr); - return -1; + return GetPriSyscapResult(capVectorPtr, -1); } if (!cJSON_AddItemToArray(capVectorPtr, cJSON_CreateString(fullCapStr))) { printf("cJSON_AddItemToArray or cJSON_CreateString failed\n"); - cJSON_Delete(capVectorPtr); - return -1; + return GetPriSyscapResult(capVectorPtr, -1); } tempPriSyscapStr = priSyscapStr; ptrPrivateSyscap++; @@ -393,8 +396,7 @@ int32_t GetPriSyscap(PCIDMain *pcidMain, cJSON *sysCapObject, size_t contextBufL } if (!cJSON_AddItemToObject(sysCapObject, "private", capVectorPtr)) { PRINT_ERR("cJSON_AddItemToObject failed\n"); - cJSON_Delete(capVectorPtr); - return -1; + return GetPriSyscapResult(capVectorPtr, -1); } return 0; } @@ -683,7 +685,6 @@ static int32_t AddPriSyscapToJsonObj(char *priSyscapString, uint32_t priSyscapSt cJSON_Delete(sysCapArray); return -1; } - cJSON_Delete(sysCapArray); return 0; } @@ -692,10 +693,12 @@ int32_t GetSyscapStr(char *input, char const *priSyscapStr, uint32_t* osSyscap, uint32_t fileContextLen; if (GetFileContext(input, &ctx, (uint32_t *)&fileContextLen) != 0) { PRINT_ERR("GetFileContext failed, input file : %s\n", input); + free(ctx); return -1; } if (ParseStringSyscap(ctx, osSyscap, OS_SYSCAP_NUM, pcidHeader, PCID_HEADER) != 0) { PRINT_ERR("Parse string syscap failed.\n"); + free(ctx); return -1; } priSyscapStr = ctx; @@ -735,6 +738,10 @@ int32_t DecodeStringPCIDToJson(char *input, char *outDirPath) } // save as json file char *jsonBuffer = cJSON_Print(rootObj); + if (jsonBuffer == NULL) { + PRINT_ERR("json buffer is null.\n"); + goto ADD_JSON_FAILED; + } const char outputFileName[] = "PCID.json"; if (ConvertedContextSaveAsFile(outDirPath, outputFileName, jsonBuffer, strlen(jsonBuffer)) != 0) { @@ -780,7 +787,6 @@ static int32_t GetEncodePCIDOut(uint16_t priSyscapCount, uint32_t privateSyscapL output = (char *)malloc(outputLen); if (output == NULL) { PRINT_ERR("malloc failed\n"); - free(output); return FreeAfterEncodePCID(freePcidInfo, FREE_ENCODE_PCID_PRISYSCAP_FULL_OUT, ret); } (void)memset_s(output, outputLen, 0, outputLen); diff --git a/src/syscap_tool.c b/src/syscap_tool.c index b79c6b7..cc6051c 100644 --- a/src/syscap_tool.c +++ b/src/syscap_tool.c @@ -261,12 +261,13 @@ int32_t RPCIDDecode(char *inputFile, char *outputPath) ret = ConvertedContextSaveAsFile(outputPath, "RPCID.json", convertedBuffer, strlen(convertedBuffer)); if (ret != 0) { PRINT_ERR("ConvertedContextSaveAsFile failed, outputPath:%s, filename:rpcid.json\n", outputPath); + free(convertedBuffer); goto FREE_RPCID_ROOT; } + free(convertedBuffer); FREE_RPCID_ROOT: cJSON_Delete(rpcidRoot); - free(convertedBuffer); FREE_CONTEXT_OUT: FreeContextBuffer(contextBuffer); return ret; -- Gitee From 685484075dce9d131b40b1cbcb27df890f6fa6cf Mon Sep 17 00:00:00 2001 From: lichao Date: Fri, 26 Apr 2024 16:02:08 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=BC=96=E7=A0=81=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lichao --- src/create_pcid.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/create_pcid.c b/src/create_pcid.c index 6929741..cb92d9a 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -345,7 +345,7 @@ int32_t GetOsSyscap(PCIDMain *pcidMain, cJSON *sysCapObject) return 0; } -int32_t GetPriSyscapResult(cJSON* capVectorPtr, int32_t ret) +static int32_t GetPriSyscapResult(cJSON* capVectorPtr, int32_t ret) { cJSON_Delete(capVectorPtr); return ret; @@ -688,7 +688,8 @@ static int32_t AddPriSyscapToJsonObj(char *priSyscapString, uint32_t priSyscapSt return 0; } -int32_t GetSyscapStr(char *input, char const *priSyscapStr, uint32_t* osSyscap, uint32_t *pcidHeader) { +int32_t GetSyscapStr(char *input, char const *priSyscapStr, uint32_t* osSyscap, uint32_t *pcidHeader) +{ char *ctx = NULL; uint32_t fileContextLen; if (GetFileContext(input, &ctx, (uint32_t *)&fileContextLen) != 0) { -- Gitee From eeb35ee8c205fc021df0927df550e2817242ee4c Mon Sep 17 00:00:00 2001 From: lichao Date: Sun, 28 Apr 2024 11:49:54 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E7=BC=96=E7=A0=81=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E6=95=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lichao --- src/create_pcid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/create_pcid.c b/src/create_pcid.c index cb92d9a..d08ff36 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -688,7 +688,7 @@ static int32_t AddPriSyscapToJsonObj(char *priSyscapString, uint32_t priSyscapSt return 0; } -int32_t GetSyscapStr(char *input, char const *priSyscapStr, uint32_t* osSyscap, uint32_t *pcidHeader) +static int32_t GetSyscapStr(char *input, char const *priSyscapStr, uint32_t* osSyscap, uint32_t *pcidHeader) { char *ctx = NULL; uint32_t fileContextLen; -- Gitee