summaryrefslogtreecommitdiffstats
path: root/sandbox/win/src/process_policy_test.cc
diff options
context:
space:
mode:
authorwfh <wfh@chromium.org>2016-01-25 12:12:39 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-25 20:13:58 +0000
commitffa50a6879c547a73b8813a96a6d8d00448064f1 (patch)
treebb7b41c2d2d1393112f9ee959249a62bfe8a1a6d /sandbox/win/src/process_policy_test.cc
parentabe355b9079ce4d4a23f8abc36d7efde417c7597 (diff)
downloadchromium_src-ffa50a6879c547a73b8813a96a6d8d00448064f1.zip
chromium_src-ffa50a6879c547a73b8813a96a6d8d00448064f1.tar.gz
chromium_src-ffa50a6879c547a73b8813a96a6d8d00448064f1.tar.bz2
Make TargetCreateProcessA consistent with TargetCreateProcessW.
Add a test that would previously crash before this CL. BUG=580916 Review URL: https://codereview.chromium.org/1621413003 Cr-Commit-Position: refs/heads/master@{#371293}
Diffstat (limited to 'sandbox/win/src/process_policy_test.cc')
-rw-r--r--sandbox/win/src/process_policy_test.cc40
1 files changed, 40 insertions, 0 deletions
diff --git a/sandbox/win/src/process_policy_test.cc b/sandbox/win/src/process_policy_test.cc
index 47240a0..3ea2c1f 100644
--- a/sandbox/win/src/process_policy_test.cc
+++ b/sandbox/win/src/process_policy_test.cc
@@ -243,6 +243,32 @@ SBOX_TESTS_COMMAND int Process_GetChildProcessToken(int argc, wchar_t **argv) {
return SBOX_TEST_FAILED;
}
+// Creates a suspended process using CreateProcessA then kill it.
+SBOX_TESTS_COMMAND int Process_CreateProcessA(int argc, wchar_t** argv) {
+ if (argc != 1)
+ return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
+
+ if ((NULL == argv) || (NULL == argv[0]))
+ return SBOX_TEST_FAILED_TO_EXECUTE_COMMAND;
+
+ STARTUPINFOA si = {sizeof(si)};
+
+ base::string16 path = MakePathToSys(argv[0], false);
+
+ PROCESS_INFORMATION temp_process_info = {};
+ // Create suspended to avoid popping calc.
+ if (!::CreateProcessA(base::SysWideToMultiByte(path, CP_UTF8).c_str(), NULL,
+ NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si,
+ &temp_process_info)) {
+ return SBOX_TEST_FAILED;
+ }
+ base::win::ScopedProcessInformation pi(temp_process_info);
+
+ if (!::TerminateProcess(pi.process_handle(), 0))
+ return SBOX_TEST_FAILED;
+
+ return SBOX_TEST_SUCCEEDED;
+}
SBOX_TESTS_COMMAND int Process_OpenToken(int argc, wchar_t **argv) {
HANDLE token;
@@ -384,4 +410,18 @@ TEST(ProcessPolicyTest, TestGetProcessTokenMaxAccessNoJob) {
runner.RunTest(L"Process_GetChildProcessToken findstr.exe"));
}
+TEST(ProcessPolicyTest, TestCreateProcessA) {
+ TestRunner runner;
+ sandbox::TargetPolicy* policy = runner.GetPolicy();
+ policy->SetJobLevel(JOB_NONE, 0);
+ policy->SetTokenLevel(USER_UNPROTECTED, USER_UNPROTECTED);
+
+ base::string16 exe_path = MakePathToSys(L"calc.exe", false);
+ ASSERT_TRUE(!exe_path.empty());
+ EXPECT_TRUE(runner.AddRule(TargetPolicy::SUBSYS_PROCESS,
+ TargetPolicy::PROCESS_ALL_EXEC, exe_path.c_str()));
+ EXPECT_EQ(SBOX_TEST_SUCCEEDED,
+ runner.RunTest(L"Process_CreateProcessA calc.exe"));
+}
+
} // namespace sandbox