From eb8c48b1c5cd7231585b2d03cec9ca28477aaf28 Mon Sep 17 00:00:00 2001 From: yudechen Date: Tue, 5 Jul 2022 11:24:41 +0800 Subject: [PATCH] fix possible decodeing pcid string to json error. Signed-off-by: yudechen Change-Id: I19d324f9b33716d99b0ac120a58bfc667001fad8 --- include/create_pcid.h | 4 +--- include/syscap_define.h | 26 ++++++++++----------- src/create_pcid.c | 52 ++++++++++++++++++++--------------------- src/main.c | 6 +++-- 4 files changed, 43 insertions(+), 45 deletions(-) diff --git a/include/create_pcid.h b/include/create_pcid.h index 7262e7e..65f5d85 100644 --- a/include/create_pcid.h +++ b/include/create_pcid.h @@ -19,8 +19,6 @@ #include #define OS_SYSCAP_BYTES 120 -#define TYPE_FILE 1 -#define TYPE_STRING 2 typedef struct ProductCompatibilityID { uint16_t apiVersion : 15; @@ -41,6 +39,6 @@ typedef struct pcidHeader { int32_t CreatePCID(char *inputFile, char *outDirPath); int32_t DecodePCID(char *inputFile, char *outDirPath); -int32_t DecodeStringPCIDToJson(char *input, char *outDirPath, int type); +int32_t DecodeStringPCIDToJson(char *input, char *outDirPath); int32_t EncodePcidscToString(char *inputFile, char *outDirPath); #endif \ No newline at end of file diff --git a/include/syscap_define.h b/include/syscap_define.h index 91ded4f..60ae8b9 100644 --- a/include/syscap_define.h +++ b/include/syscap_define.h @@ -30,7 +30,7 @@ typedef enum SystemCapabilityNum { ACCOUNT_APPACCOUNT, ACCOUNT_OSACCOUNT, ACE_ACEENGINELITE, - ACE_UI_APPEARANCE, + ACE_UIAPPEARANCE, AI_AIENGINE, APPLICATIONS_CONTACTSDATA, BARRIERFREE_ACCESSIBILITY_CORE, @@ -62,10 +62,10 @@ typedef enum SystemCapabilityNum { DISTRIBUTEDDATAMANAGER_PREFERENCES_CORE, DISTRIBUTEDDATAMANAGER_RELATIONALSTORE_CORE, DISTRIBUTEDHARDWARE_DEVICEMANAGER, - DISTRIBUTEDHARDWARE_DISTRIBUTED_CAMERA, - DISTRIBUTEDHARDWARE_DISTRIBUTED_HARDWARE_FWK, - DISTRIBUTEDHARDWARE_DISTRIBUTED_SCREEN, - DISTRIBUTEDHARDWARE_DISTRIBUTED_INPUT, + DISTRIBUTEDHARDWARE_DISTRIBUTEDCAMERA, + DISTRIBUTEDHARDWARE_DISTRIBUTEDHARDWAREFWK, + DISTRIBUTEDHARDWARE_DISTRIBUTEDSCREEN, + DISTRIBUTEDHARDWARE_DISTRIBUTEDINPUT, FILEMANAGEMENT_FILEMANAGERSERVICE, FILEMANAGEMENT_REMOTEFILESHARE, FILEMANAGEMENT_STORAGESERVICE_BACKUP, @@ -145,7 +145,7 @@ typedef enum SystemCapabilityNum { RESOURCESCHEDULE_USAGESTATISTICS_APPGROUP, RESOURCESCHEDULE_WORKSCHEDULER, SECURITY_ACCESSTOKEN, - SECURITY_DLP_PERMISSION_SERVICE, + SECURITY_DLPPERMISSIONSERVICE, SECURITY_APPVERIFY, SECURITY_DATATRANSITMANAGER, SECURITY_DEVICEAUTH, @@ -182,7 +182,7 @@ typedef enum SystemCapabilityNum { const static SyscapWithNum arraySyscap[] = { {"SystemCapability.Account.AppAccount", ACCOUNT_APPACCOUNT}, {"SystemCapability.Account.OsAccount", ACCOUNT_OSACCOUNT}, - {"SystemCapability.Ace.UiAppearance", ACE_UI_APPEARANCE}, + {"SystemCapability.Ace.UiAppearance", ACE_UIAPPEARANCE}, {"SystemCapability.Ace.AceEngineLite", ACE_ACEENGINELITE}, {"SystemCapability.Ai.AiEngine", AI_AIENGINE}, {"SystemCapability.Applications.ContactsData", APPLICATIONS_CONTACTSDATA}, @@ -215,10 +215,10 @@ const static SyscapWithNum arraySyscap[] = { {"SystemCapability.DistributedDataManager.Preferences.Core", DISTRIBUTEDDATAMANAGER_PREFERENCES_CORE}, {"SystemCapability.DistributedDataManager.RelationalStore.Core", DISTRIBUTEDDATAMANAGER_RELATIONALSTORE_CORE}, {"SystemCapability.DistributedHardware.DeviceManager", DISTRIBUTEDHARDWARE_DEVICEMANAGER}, - {"SystemCapability.DistributedHardware.DistributedCamera", DISTRIBUTEDHARDWARE_DISTRIBUTED_CAMERA}, - {"SystemCapability.DistributedHardware.DistributedHardwareFWK", DISTRIBUTEDHARDWARE_DISTRIBUTED_HARDWARE_FWK}, - {"SystemCapability.DistributedHardware.DistributedScreen", DISTRIBUTEDHARDWARE_DISTRIBUTED_SCREEN}, - {"SystemCapability.DistributedHardware.DistributedInput", DISTRIBUTEDHARDWARE_DISTRIBUTED_INPUT}, + {"SystemCapability.DistributedHardware.DistributedCamera", DISTRIBUTEDHARDWARE_DISTRIBUTEDCAMERA}, + {"SystemCapability.DistributedHardware.DistributedHardwareFWK", DISTRIBUTEDHARDWARE_DISTRIBUTEDHARDWAREFWK}, + {"SystemCapability.DistributedHardware.DistributedScreen", DISTRIBUTEDHARDWARE_DISTRIBUTEDSCREEN}, + {"SystemCapability.DistributedHardware.DistributedInput", DISTRIBUTEDHARDWARE_DISTRIBUTEDINPUT}, {"SystemCapability.FileManagement.FileManagerService", FILEMANAGEMENT_FILEMANAGERSERVICE}, {"SystemCapability.FileManagement.RemoteFileShare", FILEMANAGEMENT_REMOTEFILESHARE}, {"SystemCapability.FileManagement.StorageService.Backup", FILEMANAGEMENT_STORAGESERVICE_BACKUP}, @@ -226,7 +226,7 @@ const static SyscapWithNum arraySyscap[] = { {"SystemCapability.Graphic.Graphic2D.EGL", GRAPHIC_GRAPHIC2D_EGL}, {"SystemCapability.Graphic.Graphic2D.GLES3", GRAPHIC_GRAPHIC2D_GLES3}, {"SystemCapability.Graphic.Graphic2D.NativeDrawing", GRAPHIC_GRAPHIC2D_NATIVEDRAWING}, - {"SystemCapability.Graphic.Graphic2D.NativeWindow", GRAPHIC_GRAPHIC2D_NATIVEDRAWING}, + {"SystemCapability.Graphic.Graphic2D.NativeWindow", GRAPHIC_GRAPHIC2D_NATIVEWINDOW}, {"SystemCapability.Graphic.Graphic2D.WebGL", GRAPHIC_GRAPHIC2D_WEBGL}, {"SystemCapability.Graphic.Graphic2D.WebGL2", GRAPHIC_GRAPHIC2D_WEBGL2}, {"SystemCapability.Graphic.Surface", GRAPHIC_SURFACE}, @@ -298,7 +298,7 @@ const static SyscapWithNum arraySyscap[] = { {"SystemCapability.ResourceSchedule.UsageStatistics.AppGroup", RESOURCESCHEDULE_USAGESTATISTICS_APPGROUP}, {"SystemCapability.ResourceSchedule.WorkScheduler", RESOURCESCHEDULE_WORKSCHEDULER}, {"SystemCapability.Security.AccessToken", SECURITY_ACCESSTOKEN}, - {"SystemCapability.Security.DlpPermissionService", SECURITY_DLP_PERMISSION_SERVICE}, + {"SystemCapability.Security.DlpPermissionService", SECURITY_DLPPERMISSIONSERVICE}, {"SystemCapability.Security.AppVerify", SECURITY_APPVERIFY}, {"SystemCapability.Security.DataTransitManager", SECURITY_DATATRANSITMANAGER}, {"SystemCapability.Security.DeviceAuth", SECURITY_DEVICEAUTH}, diff --git a/src/create_pcid.c b/src/create_pcid.c index 38aa53f..b315018 100644 --- a/src/create_pcid.c +++ b/src/create_pcid.c @@ -533,12 +533,15 @@ static int32_t ParseStringSyscap(char *input, uint32_t *osSyscap, uint32_t osSys return -1; } - while (sscanf_s(input, "%u,%s", &tempNum, input, inputLen) == 2) { // 2, return val of "%u,%s" + while (sscanf_s(input, "%u,%s", &tempNum, input, inputLen)) { + osSyscap[i++] = tempNum; if (i >= OS_SYSCAP_NUM) { - PRINT_ERR("Get os syscap numbers(%u) greater than %u.\n", i + 1, osSyscapNum); - return -1; + break; } - osSyscap[i++] = tempNum; + } + + if (strlen(input) <= 1) { + *input = '\0'; } return 0; @@ -635,6 +638,14 @@ static int32_t AddPriSyscapToJsonObj(char *priSyscapString, uint32_t priSyscapSt free(sysCapArray); return -1; } + if (priSyscapStringLen == 0) { + if (!cJSON_AddItemToObject(sysCapObj, "private", sysCapArray)) { + PRINT_ERR("Add private syscap array to json failed.\n"); + free(sysCapArray); + return -1; + } + return 0; + } token = strtok(priSyscapString, ","); while (token != NULL) { @@ -653,7 +664,7 @@ static int32_t AddPriSyscapToJsonObj(char *priSyscapString, uint32_t priSyscapSt return 0; } -int32_t DecodeStringPCIDToJson(char *input, char *outDirPath, int type) +int32_t DecodeStringPCIDToJson(char *input, char *outDirPath) { int32_t ret = -1; uint32_t osSyscapUintArray[OS_SYSCAP_NUM] = {0}; @@ -662,27 +673,16 @@ int32_t DecodeStringPCIDToJson(char *input, char *outDirPath, int type) char *fileContext = NULL; char *priSyscapStr = NULL; - // judge input type - if (type == TYPE_FILE) { - if (GetFileContext(input, &fileContext, &fileContextLen)) { - PRINT_ERR("GetFileContext failed, input file : %s\n", input); - goto PARSE_FAILED; - } - if (ParseStringSyscap(fileContext, osSyscapUintArray, OS_SYSCAP_NUM, pcidHeader, PCID_HEADER)) { - PRINT_ERR("Parse string syscap failed.\n"); - goto PARSE_FAILED; - } - priSyscapStr = fileContext; - } else if (type == TYPE_STRING) { - if (ParseStringSyscap(input, osSyscapUintArray, OS_SYSCAP_NUM, pcidHeader, PCID_HEADER)) { - PRINT_ERR("Parse string syscap failed.\n"); - goto PARSE_FAILED; - } - priSyscapStr = input; - } else { - PRINT_ERR("Input type failed.\n"); + if (GetFileContext(input, &fileContext, &fileContextLen)) { + PRINT_ERR("GetFileContext failed, input file : %s\n", input); goto PARSE_FAILED; } + if (ParseStringSyscap(fileContext, osSyscapUintArray, OS_SYSCAP_NUM, pcidHeader, PCID_HEADER)) { + PRINT_ERR("Parse string syscap failed.\n"); + goto PARSE_FAILED; + } + priSyscapStr = fileContext; + // add to json object cJSON *sysCapObj = cJSON_CreateObject(); cJSON *rootObj = cJSON_CreateObject(); @@ -716,9 +716,7 @@ SAVE_FAILED: ADD_JSON_FAILED: cJSON_Delete(rootObj); PARSE_FAILED: - if (type == TYPE_FILE) { - free(fileContext); - } + free(fileContext); return ret; } diff --git a/src/main.c b/src/main.c index 760f67e..e2c2dd0 100644 --- a/src/main.c +++ b/src/main.c @@ -29,7 +29,7 @@ printf("ERROR: [%s: %d] -> ", __FILE__, __LINE__); \ printf(__VA_ARGS__); \ } while (0) -#define SYSCAP_VERSION "1.0.0" +#define SYSCAP_VERSION "1.0.1" #define OUTPUT_VERSION_LEN 200 #define ENCODE 0 #define DECODE 1 @@ -136,7 +136,9 @@ int main(int argc, char **argv) case 0x112: // 0x112, -Pdi inputfile ret = DecodePCID(inputfile, outputpath); break; case 0x116: // 0x116, -Pdsi inputfile - ret = DecodeStringPCIDToJson(inputfile, outputpath, TYPE_FILE); break; + ret = DecodeStringPCIDToJson(inputfile, outputpath); break; + case 0x10E: // 0x10E, -Rdsi inputfile + printf("-Rdsi is not support currently.\n"); break; case 0x80: // 0x80, -v (void)OutputVersion(argv[optind], optind); break; default: -- Gitee