提交 21b66aba 编写于 作者: O openharmony_ci 提交者: Gitee

!174 修改wmenmchar的参数可能导致数组越界

Merge pull request !174 from 南先森/kernel_lite_20210429_2
...@@ -246,11 +246,11 @@ HWTEST_F(IoTest, testWmemset, Function | MediumTest | Level1) ...@@ -246,11 +246,11 @@ HWTEST_F(IoTest, testWmemset, Function | MediumTest | Level1)
HWTEST_F(IoTest, testWmemchr, Function | MediumTest | Level1) HWTEST_F(IoTest, testWmemchr, Function | MediumTest | Level1)
{ {
wchar_t src[] = L"hello world"; wchar_t src[] = L"hello world";
wchar_t *ret = wmemchr(src, L' ', sizeof(src)); wchar_t *ret = wmemchr(src, L' ', sizeof(src) / sizeof(src[0]) - 1);
EXPECT_STREQ(ret, L" world"); EXPECT_STREQ(ret, L" world");
wchar_t srcT[] = L"this is string"; wchar_t srcT[] = L"this is string";
ret = wmemchr(srcT, L'?', sizeof(srcT)); ret = wmemchr(srcT, L'?', sizeof(srcT) / sizeof(srcT[0]) - 1);
EXPECT_STREQ(ret, nullptr); EXPECT_STREQ(ret, nullptr);
} }
......
...@@ -67,7 +67,8 @@ HWTEST_F(PidTest, testOrphanProcess, Function | MediumTest | Level1) ...@@ -67,7 +67,8 @@ HWTEST_F(PidTest, testOrphanProcess, Function | MediumTest | Level1)
ASSERT_NE(shmID, -1) << "get share mem fail, errno = " << errno; ASSERT_NE(shmID, -1) << "get share mem fail, errno = " << errno;
int *shared = (int*)(shmat(shmID, nullptr, 0)); int *shared = (int*)(shmat(shmID, nullptr, 0));
ASSERT_NE(shared, reinterpret_cast<int*>(-1)) << "shmat fail, errno = " << errno; ASSERT_NE(shared, reinterpret_cast<int*>(-1)) << "shmat fail, errno = " << errno;
*shared = retPass; shared[0] = retPass;
shared[1] = 0;
LOG("parent process id:%d", getpid()); LOG("parent process id:%d", getpid());
pid_t pid = fork(); pid_t pid = fork();
...@@ -77,22 +78,26 @@ HWTEST_F(PidTest, testOrphanProcess, Function | MediumTest | Level1) ...@@ -77,22 +78,26 @@ HWTEST_F(PidTest, testOrphanProcess, Function | MediumTest | Level1)
pid_t pid2 = fork(); pid_t pid2 = fork();
if (pid2 < 0) { if (pid2 < 0) {
LOG("======== Fork Error! ========="); LOG("======== Fork Error! =========");
*shared = 1;
exit(1); exit(1);
} }
if (pid2 == 0) { // child if (pid2 == 0) { // child
LOG("orphane process id:%d", getpid()); LOG("orphane process id:%d", getpid());
Msleep(100); int *shmAddr = (int*)(shmat(shmID, nullptr, 0));
LOG("before while child child %d", shmAddr[1]);
while (shmAddr[1] != 1) {
Msleep(50);
}
LOG("after while child child %d", shmAddr[1]);
pid_t pPid = getppid(); pid_t pPid = getppid();
if (pPid != 1) { if (pPid != 1) {
LOG("getppid orphaned process fail, expect:1, but get:%d", pPid); LOG("getppid orphaned process fail, expect:1, but get:%d", pPid);
// transfer result to main process // transfer result to main process
int *shmAddr = (int*)(shmat(shmID, nullptr, 0)); shmAddr[0] == retFail;
*shmAddr = retFail;
shmdt(shmAddr);
exit(0);
} }
shmAddr[1] =2;
LOG("child child exit %d", shmAddr[1]);
shmdt(shmAddr);
exit(0); exit(0);
} else { // sub parent } else { // sub parent
exit(0); exit(0);
...@@ -100,8 +105,13 @@ HWTEST_F(PidTest, testOrphanProcess, Function | MediumTest | Level1) ...@@ -100,8 +105,13 @@ HWTEST_F(PidTest, testOrphanProcess, Function | MediumTest | Level1)
} }
// parent // parent
WaitProcExitedOK(pid); WaitProcExitedOK(pid);
shared[1] = 1;
Msleep(200); Msleep(200);
EXPECT_EQ(*shared, retPass); EXPECT_EQ(shared[0], retPass);
LOG("before while paret %d", shared[1]);
while (shared[1] != 2) {
Msleep(50);
}
shmdt(shared); shmdt(shared);
shmctl(shmID, IPC_RMID, nullptr); shmctl(shmID, IPC_RMID, nullptr);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册