diff --git a/interfaces/inner_api/syscap_interface.c b/interfaces/inner_api/syscap_interface.c index 976bfeb..6e1d402 100644 --- a/interfaces/inner_api/syscap_interface.c +++ b/interfaces/inner_api/syscap_interface.c @@ -594,14 +594,14 @@ int32_t ComparePcidString(const char *pcidString, const char *rpcidString, Compa return -1; } uint32_t pos = (i - 2) * INT_BIT + k; - uint32_t t_; - for (t_ = 0; t_ < allSyscapNum; t_++) { - if (g_arraySyscap[t_].num == pos) { + uint32_t t; + for (t = 0; t < allSyscapNum; t++) { + if (g_arraySyscap[t].num == pos) { break; } } ret = strcpy_s(tempSyscap, sizeof(char) * SINGLE_SYSCAP_LEN, - g_arraySyscap[t_].str); // 2, header of pcid & rpcid + g_arraySyscap[t].str); // 2, header of pcid & rpcid if (ret != EOK) { PRINT_ERR("strcpy_s failed.\n"); FreeCompareError(result); diff --git a/src/create_pcid.c b/src/create_pcid.c index 744bc59..34680e5 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -176,9 +176,13 @@ int32_t SetOsSyscap(PCIDMain *pcidBuffer, uint32_t osCapSize, for (uint32_t i = 0; i < osCapSize; i++) { jsonArrayItem = cJSON_GetArrayItem(jsonOsSyscapObj, (int)i); + if (jsonArrayItem == NULL || !cJSON_IsString(jsonArrayItem)) { + PRINT_ERR("Get jsonArrayItem failed."); + return -1; + } osCapIndex = cJSON_GetObjectItem(allOsSyscapObj, jsonArrayItem->valuestring); - if (osCapIndex == NULL) { - PRINT_ERR("can't find the syscap: %s, please add it in syscap_define.h.\n", jsonArrayItem->valuestring); + if (osCapIndex == NULL || !cJSON_IsNumber(osCapIndex)) { + PRINT_ERR("Get osCapIndex failed."); return -1; } sectorOfBits = (osCapIndex->valueint) / UINT8_BIT; @@ -200,6 +204,10 @@ int32_t SetPriSyscap(PCIDMain *pcidBuffer, cJSON *jsonPriSyscapObj, char *priSyscapStr = NULL; for (uint32_t i = 0; i < privateCapSize; i++) { cJSON *jsonArrayItem = cJSON_GetArrayItem(jsonPriSyscapObj, (int)i); + if (jsonArrayItem == NULL || !cJSON_IsString(jsonArrayItem)) { + PRINT_ERR("get jsonArrayItem failed!"); + return -1; + } priSyscapStr = strchr(jsonArrayItem->valuestring, '.') + 1; errno_t nRet = strcat_s(priSyscapHead, allPriSyscapStrLen + 1, priSyscapStr); nRet += strcat_s(priSyscapHead, allPriSyscapStrLen + 1, ","); @@ -285,6 +293,10 @@ int32_t GetPriSyscapLen(uint32_t privateCapSize, cJSON *jsonPriSyscapObj, uint16 { for (uint32_t i = 0; i < privateCapSize; i++) { cJSON *jsonArrayItem = cJSON_GetArrayItem(jsonPriSyscapObj, (int)i); + if (jsonArrayItem == NULL || !cJSON_IsString(jsonArrayItem)) { + PRINT_ERR("Get jsonArrayItem failed."); + return -1; + } *len += (uint16_t)strlen(strchr(jsonArrayItem->valuestring, '.') + 1); (*len)++; // for separator ',' } diff --git a/src/syscap_tool.c b/src/syscap_tool.c index 0f83187..85d62b1 100644 --- a/src/syscap_tool.c +++ b/src/syscap_tool.c @@ -670,13 +670,13 @@ int32_t GetSyscapByIndex(uint32_t index) return -1; } -int32_t CompareOsSyscap(uint32_t pcidOsAarry[], uint32_t rpcidOsAarry[]) +int32_t CompareOsSyscap(const uint32_t pcidOsArray[], const uint32_t rpcidOsAarry[]) { int32_t ossyscapFlag = 0; const size_t allSyscapNum = sizeof(g_arraySyscap) / sizeof(SyscapWithNum); for (uint32_t i = 2; i < PCID_OUT_BUFFER; i++) { // 2, header of pcid & rpcid - uint32_t blockBits = (pcidOsAarry[i] ^ rpcidOsAarry[i]) & rpcidOsAarry[i]; + uint32_t blockBits = (pcidOsArray[i] ^ rpcidOsAarry[i]) & rpcidOsAarry[i]; if (!blockBits) { continue; } @@ -720,10 +720,10 @@ int32_t ComparePriSyscap(char *pcid, char *rpcid, uint32_t pcidLen, uint32_t rpc return prisyscapFlag; } -int32_t CompoareVersion(uint32_t *pcidOsAarry, uint32_t *rpcidOsAarry) +int32_t CompoareVersion(uint32_t *pcidOsArray, uint32_t *rpcidOsAarry) { int32_t versionFlag = 0; - uint16_t pcidVersion = NtohsInter(((PCIDMain *)pcidOsAarry)->apiVersion); + uint16_t pcidVersion = NtohsInter(((PCIDMain *)pcidOsArray)->apiVersion); uint16_t rpcidVersion = NtohsInter(((RPCIDHead *)rpcidOsAarry)->apiVersion); if (pcidVersion < rpcidVersion) { printf("ERROR: Pcid version(%u) less than rpcid version(%u).\n", pcidVersion, rpcidVersion); @@ -740,7 +740,7 @@ int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile, uint32_t typ char *pcidPriSyscap = NULL; char *rpcidPriSyscap = NULL; uint32_t pcidContentLen, rpcidContentLen, pcidPriSyscapLen, rpcidPriSyscapLen; - uint32_t pcidOsAarry[PCID_OUT_BUFFER] = {0}; + uint32_t pcidOsArray[PCID_OUT_BUFFER] = {0}; uint32_t rpcidOsAarry[PCID_OUT_BUFFER] = {0}; if (type == TYPE_FILE) { @@ -761,7 +761,7 @@ int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile, uint32_t typ return -1; } - ret = SeparateSyscapFromString(pcidContent, pcidOsAarry, PCID_OUT_BUFFER, + ret = SeparateSyscapFromString(pcidContent, pcidOsArray, PCID_OUT_BUFFER, &pcidPriSyscap, &pcidPriSyscapLen); ret += SeparateSyscapFromString(rpcidContent, rpcidOsAarry, RPCID_OUT_BUFFER, &rpcidPriSyscap, &rpcidPriSyscapLen); @@ -770,8 +770,8 @@ int32_t ComparePcidWithRpcidString(char *pcidFile, char *rpcidFile, uint32_t typ return -1; } - int32_t versionFlag = CompoareVersion(pcidOsAarry, rpcidOsAarry); - int32_t ossyscapFlag = CompareOsSyscap(pcidOsAarry, rpcidOsAarry); + int32_t versionFlag = CompoareVersion(pcidOsArray, rpcidOsAarry); + int32_t ossyscapFlag = CompareOsSyscap(pcidOsArray, rpcidOsAarry); int32_t prisyscapFlag = ComparePriSyscap(pcidPriSyscap, rpcidPriSyscap, pcidPriSyscapLen, rpcidPriSyscapLen); if (!versionFlag && !ossyscapFlag && !prisyscapFlag) { printf("Succeed! The pcid meets the rpcid.\n");