diff --git a/services/src/appspawn_message.c b/services/src/appspawn_message.c index fc1cbad8c9ee3d8cf089f8261de96a591ab7d07b..1565c52a0899321f88b93abac66bd051d05d2cbb 100644 --- a/services/src/appspawn_message.c +++ b/services/src/appspawn_message.c @@ -59,7 +59,7 @@ void FreeMessageSt(MessageSt* targetSt) } } -static int ReadStringItem(cJSON* strItem, char** buf, size_t maxLen, size_t minLen) +static enum OHOSLiteErrorCode ReadStringItem(cJSON* strItem, char** buf, size_t maxLen, size_t minLen) { if (strItem == NULL || !cJSON_IsString(strItem)) { return EC_INVALID; @@ -80,7 +80,7 @@ static int ReadStringItem(cJSON* strItem, char** buf, size_t maxLen, size_t minL return EC_NOMEMORY; } - if (strLength > 0 && memcpy_s(bufTmp, strLength, strPtr, strLength) != EOK) { + if (strLength > 0 && memcpy_s(bufTmp, strLength + 1, strPtr, strLength) != EOK) { free(bufTmp); bufTmp = NULL; return EC_FAILURE; @@ -117,7 +117,7 @@ static int GetCaps(const cJSON* curItem, MessageSt* msgSt) } if (capsCnt > MAX_CAPABILITY_COUNT) { - HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] GetCaps, too many caps[cnt %{public}d], max %{public}d",\ + HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] GetCaps, too many caps[cnt %{public}d], max %{public}d", capsCnt, MAX_CAPABILITY_COUNT); return EC_INVALID; } @@ -167,7 +167,7 @@ int SplitMessage(const char* msg, unsigned int msgLen, MessageSt* msgSt) } cJSON* bundleNameItem = cJSON_GetObjectItem(rootJ, "bundleName"); - int ret = ReadStringItem(bundleNameItem, &(msgSt->bundleName), MAX_BUNDLE_NAME_LEN, MIN_BUNDLE_NAME_LEN); + int ret = (int)ReadStringItem(bundleNameItem, &(msgSt->bundleName), MAX_BUNDLE_NAME_LEN, MIN_BUNDLE_NAME_LEN); if (ret != EC_SUCCESS) { FreeMessageSt(msgSt); cJSON_Delete(rootJ); @@ -175,7 +175,7 @@ int SplitMessage(const char* msg, unsigned int msgLen, MessageSt* msgSt) } cJSON* identityIDItem = cJSON_GetObjectItem(rootJ, "identityID"); - ret = ReadStringItem(identityIDItem, &(msgSt->identityID), MAX_IDENTITY_ID_LEN, MIN_IDENTITY_ID_LEN); + ret = (int)ReadStringItem(identityIDItem, &(msgSt->identityID), MAX_IDENTITY_ID_LEN, MIN_IDENTITY_ID_LEN); if (ret != EC_SUCCESS) { FreeMessageSt(msgSt); cJSON_Delete(rootJ); diff --git a/services/src/appspawn_process.c b/services/src/appspawn_process.c index 0a6edad85293b87d150f67d3fbe38c2b964d642f..277b03f95bcc315e434bd6f735918ca8c3e3cc13 100755 --- a/services/src/appspawn_process.c +++ b/services/src/appspawn_process.c @@ -150,6 +150,9 @@ pid_t CreateProcess(const MessageSt* msgSt) #endif // OHOS_DEBUG // set permissions + if (msgSt->caps == NULL) { + exit(0x7f); // 0x7f: user specified + } if (SetPerms(msgSt->uID, msgSt->gID, msgSt->capsCnt, msgSt->caps) != 0) { HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] sub-process %{public}s exit!", msgSt->bundleName); exit(0x7f); // 0x7f: user specified @@ -164,7 +167,7 @@ pid_t CreateProcess(const MessageSt* msgSt) getpid(), errno); } // 1s = 1000000000ns - long timeUsed = (tmEnd.tv_sec - tmStart.tv_sec) * 1000000000 + (tmEnd.tv_nsec - tmStart.tv_nsec); + long timeUsed = (tmEnd.tv_sec - tmStart.tv_sec) * (long)1000000000 + (tmEnd.tv_nsec - tmStart.tv_nsec); HILOG_INFO(HILOG_MODULE_HIVIEW, "[appspawn] sub-process, pid %{public}d, timeused %ld ns.",\ getpid(), timeUsed); #endif // OHOS_DEBUG diff --git a/services/src/appspawn_service.c b/services/src/appspawn_service.c index a04ce49cc17fc3820167cab07d3a7464e8068381..e861439f4c71e63b60b5e30629f44dec5ff3b804 100755 --- a/services/src/appspawn_service.c +++ b/services/src/appspawn_service.c @@ -85,6 +85,9 @@ static TaskConfig GetTaskConfig(Service* service) #ifdef OHOS_DEBUG static void GetCurTime(struct timespec* tmCur) { + if (tmCur == NULL) { + return; + } if (clock_gettime(CLOCK_REALTIME, tmCur) != 0) { HILOG_ERROR(HILOG_MODULE_HIVIEW, "[appspawn] invoke, get time failed! err %{public}d", errno); } @@ -93,6 +96,9 @@ static void GetCurTime(struct timespec* tmCur) static int GetMessageSt(MessageSt* msgSt, IpcIo* req) { + if (msgSt == NULL || req == NULL) { + return EC_FAILURE; + } #ifdef __LINUX__ size_t len = 0; char* str = IpcIoPopString(req, &len); @@ -155,7 +161,7 @@ static int Invoke(IServerProxy* iProxy, int funcId, void* origin, IpcIo* req, Ip GetCurTime(&tmEnd); // 1s = 1000000000ns - long timeUsed = (tmEnd.tv_sec - tmStart.tv_sec) * 1000000000 + (tmEnd.tv_nsec - tmStart.tv_nsec); + long timeUsed = (tmEnd.tv_sec - tmStart.tv_sec) * (long)1000000000 + (tmEnd.tv_nsec - tmStart.tv_nsec); HILOG_INFO(HILOG_MODULE_HIVIEW, "[appspawn] invoke, reply pid %{public}d, timeused %{public}ld ns.",\ newPid, timeUsed); #else diff --git a/services/test/unittest/common/message_func_test.cpp b/services/test/unittest/common/message_func_test.cpp index 78f291e63c0d2baaf1218340a3de0549330ca0f8..bdea3226c70726d0a40dc17e2a7bf811f3aaeaf6 100644 --- a/services/test/unittest/common/message_func_test.cpp +++ b/services/test/unittest/common/message_func_test.cpp @@ -208,6 +208,9 @@ HWTEST_F(StartupAppspawnUTest, msgFuncFreeTest_002, TestSize.Level1) static void GetCurrentTime(struct timespec* tmCur) { + if (tmCur == NULL) { + return; + } if (clock_gettime(CLOCK_REALTIME, tmCur) != 0) { printf("[----------] StartupAppspawnUTest, get time failed! err %d.\n", errno); } @@ -290,11 +293,14 @@ HWTEST_F(StartupAppspawnUTest, msgFuncSplitTest_002, TestSize.Level1) caps.push_back(1); // 1, test capability caps.push_back(5); // 5, test capability + EXPECT_NE(msgSt.bundleName, nullptr); + EXPECT_NE(msgSt.identityID, nullptr); EXPECT_EQ(strcmp("validName", msgSt.bundleName), 0); EXPECT_EQ(strcmp("135", msgSt.identityID), 0); EXPECT_EQ(TEST_UID, msgSt.uID); EXPECT_EQ(TEST_GID, msgSt.gID); EXPECT_EQ(caps.size(), msgSt.capsCnt); + EXPECT_NE(msgSt.caps, nullptr); for (size_t i = 0; i < caps.size(); ++i) { EXPECT_EQ(caps[i], msgSt.caps[i]); }