From ec269616f00788b4f43866adf5ea489adb197314 Mon Sep 17 00:00:00 2001 From: chennuo Date: Wed, 20 Aug 2025 11:52:06 +0800 Subject: [PATCH] fix bugs:kernel permission Signed-off-by: chennuo --- modules/common/appspawn_encaps.c | 25 ++++++++++++------- .../app_spawn_common_test.cpp | 23 +++++++++++------ 2 files changed, 31 insertions(+), 17 deletions(-) diff --git a/modules/common/appspawn_encaps.c b/modules/common/appspawn_encaps.c index 1d417e1d..ae531516 100644 --- a/modules/common/appspawn_encaps.c +++ b/modules/common/appspawn_encaps.c @@ -126,17 +126,24 @@ APPSPAWN_STATIC int AddPermissionStrToValue(const char *valueStr, UserEncap *enc APPSPAWN_CHECK(valueStr != NULL, return APPSPAWN_ARG_INVALID, "Invalid string value"); uint32_t valueLen = strlen(valueStr) + 1; APPSPAWN_CHECK(valueLen > 1 && valueLen <= OH_ENCAPS_VALUE_MAX_LEN, return APPSPAWN_ARG_INVALID, - "String value len is invalied, len: %{public}u", valueLen); - char *value = (char *)calloc(1, valueLen); - APPSPAWN_CHECK(value != NULL, return APPSPAWN_SYSTEM_ERROR, "Failed to calloc value"); - - int ret = strcpy_s(value, valueLen, valueStr); - APPSPAWN_CHECK(ret == EOK, free(value); - return APPSPAWN_SYSTEM_ERROR, "Failed to copy string value"); - - encap->value.ptrValue = (void *)value; + "String value len is invalid, len: %{public}u", valueLen); + APPSPAWN_LOGV("valueStr:%{public}s", valueStr); + cJSON *valueJson = cJSON_Parse(valueStr); + APPSPAWN_CHECK(valueJson != NULL, return APPSPAWN_ERROR_UTILS_CREATE_JSON_FAIL, "Invalid valueStr"); + cJSON *firstItem = cJSON_GetArrayItem(valueJson, 0); + APPSPAWN_CHECK(firstItem != NULL && cJSON_IsString(firstItem), cJSON_Delete(valueJson); + return APPSPAWN_ARG_INVALID, "get first valueJson element failed"); + + const char *value = firstItem->valuestring; + valueLen = strlen(value) + 1; + APPSPAWN_LOGV("firstItem->valuestring:%{public}s", value); + + encap->value.ptrValue = (void *)strdup(value); + APPSPAWN_CHECK(encap->value.ptrValue != NULL, cJSON_Delete(valueJson); + return APPSPAWN_ERROR_UTILS_MEM_FAIL, "strdup value failed"); encap->valueLen = valueLen; encap->type = ENCAPS_CHAR_ARRAY; + cJSON_Delete(valueJson); return 0; } diff --git a/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp b/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp index 266cb7be..9292f24a 100644 --- a/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp +++ b/test/unittest/app_spawn_standard_test/app_spawn_common_test.cpp @@ -761,7 +761,8 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_003, TestSize.Level0) APPSPAWN_CHECK(reqHandle != INVALID_REQ_HANDLE, break, "Failed to create req %{public}s", APPSPAWN_SERVER_NAME); const char *permissions = "{\"name\":\"Permissions\",\"ohos.encaps.count\":0,\"permissions\":" - "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225},{\"ohos.permission.string\":\"test\"}," + "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225}," + "{\"ohos.permission.string\":\"{\\\"key\\\":\\\"value\\\"}\"}," "{\"ohos.permission.array\":[1,2,3,4,5]}]}"; ret = AppSpawnReqMsgAddExtInfo(reqHandle, MSG_EXT_NAME_JIT_PERMISSIONS, reinterpret_cast(const_cast(permissions)), strlen(permissions) + 1); @@ -822,7 +823,8 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_005, TestSize.Level0) HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_006, TestSize.Level0) { const char encapsJsonStr[] = "{\"name\":\"Permissions\",\"ohos.encaps.count\":5,\"permissions\":" - "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225},{\"ohos.permission.string\":\"test\"}," + "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225}," + "{\"ohos.permission.string\":\"{\\\"key\\\":\\\"value\\\"}\"}," "{\"ohos.permission.array\":[1,2,3,4,5]}]}"; cJSON *encapsJson = cJSON_Parse(encapsJsonStr); @@ -842,8 +844,9 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_006, TestSize.Level0) HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_007, TestSize.Level0) { const char encapsJsonStr[] = "{\"name\":\"Permissions\",\"ohos.encaps.count\":4,\"permissions\":" - "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225},{\"ohos.permission.string\":\"test\"}," - "{\"ohos.permission.array\":[1,\"abc\",3,4,5]}]}"; + "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225}," + "{\"ohos.permission.string\":\"{\\\"key\\\":\\\"value\\\"}\"}," + "{\"ohos.permission.array\":[1,\"{\\\"key\\\":\\\"value\\\"}\",3,4,5]}]}"; cJSON *encapsJson = cJSON_Parse(encapsJsonStr); EXPECT_NE(encapsJson, nullptr); @@ -989,7 +992,8 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_014, TestSize.Level0) HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_015, TestSize.Level0) { // key len = 64 + "\0" - const char permissionItemStr[] = "{\"ohos.permission.strarrayabcdefghijklmnopqrstuvwxyzaaaaaaaaaaaaaa\":\"abc\"}"; + const char permissionItemStr[] = "{\"ohos.permission.strarrayabcdefghijklmnopqrstuvwxyzaaaaaaaaaaaaaa\":" + "\"{\\\"key\\\":\\\"value\\\"}\"}"; cJSON *permissionItem = cJSON_Parse(permissionItemStr); EXPECT_NE(permissionItem, nullptr); @@ -1006,7 +1010,8 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_015, TestSize.Level0) HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_016, TestSize.Level0) { // key len = 63 + "\0" - const char permissionItemStr[] = "{\"ohos.permission.strarrayabcdefghijklmnopqrstuvwxyzaaaaaaaaaaaaa\":\"abc\"}"; + const char permissionItemStr[] = "{\"ohos.permission.strarrayabcdefghijklmnopqrstuvwxyzaaaaaaaaaaaaa\":" + "\"{\\\"key\\\":\\\"value\\\"}\"}"; cJSON *permissionItem = cJSON_Parse(permissionItemStr); EXPECT_NE(permissionItem, nullptr); @@ -1248,7 +1253,8 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_030, TestSize.Level0) APPSPAWN_CHECK(reqHandle != INVALID_REQ_HANDLE, break, "Failed to create req %{public}s", APPSPAWN_SERVER_NAME); const char *permissions = "{\"name\":\"Permissions\",\"ohos.encaps.count\":4,\"permissions\":" - "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225},{\"ohos.permission.string\":\"test\"}," + "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225}," + "{\"ohos.permission.string\":\"{\\\"key\\\":\\\"value\\\"}\"}," "{\"ohos.permission.array\":[1,2,3,4,5]}]}"; ret = AppSpawnReqMsgAddExtInfo(reqHandle, MSG_EXT_NAME_JIT_PERMISSIONS, reinterpret_cast(const_cast(permissions)), strlen(permissions) + 1); @@ -1284,7 +1290,8 @@ HWTEST_F(AppSpawnCommonTest, App_Spawn_Encaps_031, TestSize.Level0) APPSPAWN_CHECK(reqHandle != INVALID_REQ_HANDLE, break, "Failed to create req %{public}s", APPSPAWN_SERVER_NAME); const char *permissions = "{\"name\":\"Permissions\",\"ohos.encaps.count\":4,\"permissions\":" - "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225},{\"ohos.permission.string\":\"test\"}," + "[{\"ohos.permission.bool\":true},{\"ohos.permission.int\":3225}," + "{\"ohos.permission.string\":\"{\\\"key\\\":\\\"value\\\"}\"}," "{\"ohos.permission.array\":[1,2,3,4,5]}]}"; ret = AppSpawnReqMsgAddExtInfo(reqHandle, MSG_EXT_NAME_JIT_PERMISSIONS, reinterpret_cast(const_cast(permissions)), strlen(permissions) + 1); -- Gitee