| Index: chrome_elf/chrome_elf_util_unittest.cc
|
| diff --git a/chrome_elf/chrome_elf_util_unittest.cc b/chrome_elf/chrome_elf_util_unittest.cc
|
| index ad4671a5efe3913c49197780833621dfb4c37f88..f24bde7b66d425f89f4c0ff3fbd50a9462fe971c 100644
|
| --- a/chrome_elf/chrome_elf_util_unittest.cc
|
| +++ b/chrome_elf/chrome_elf_util_unittest.cc
|
| @@ -72,17 +72,25 @@ bool IsSecuritySet() {
|
| }
|
|
|
| void RegRedirect(nt::ROOT_KEY key,
|
| - registry_util::RegistryOverrideManager& rom) {
|
| + registry_util::RegistryOverrideManager* rom) {
|
| + ASSERT_NE(key, nt::AUTO);
|
| base::string16 temp;
|
|
|
| if (key == nt::HKCU) {
|
| - rom.OverrideRegistry(HKEY_CURRENT_USER, &temp);
|
| - ::wcsncpy(nt::HKCU_override, temp.c_str(), nt::g_kRegMaxPathLen - 1);
|
| - } else if (key == nt::HKLM) {
|
| - rom.OverrideRegistry(HKEY_LOCAL_MACHINE, &temp);
|
| - ::wcsncpy(nt::HKLM_override, temp.c_str(), nt::g_kRegMaxPathLen - 1);
|
| + rom->OverrideRegistry(HKEY_CURRENT_USER, &temp);
|
| + ASSERT_TRUE(nt::SetTestingOverride(nt::HKCU, temp));
|
| + } else {
|
| + rom->OverrideRegistry(HKEY_LOCAL_MACHINE, &temp);
|
| + ASSERT_TRUE(nt::SetTestingOverride(nt::HKLM, temp));
|
| }
|
| - // nt::AUTO should not be passed into this function.
|
| +}
|
| +
|
| +void CancelRegRedirect(nt::ROOT_KEY key) {
|
| + ASSERT_NE(key, nt::AUTO);
|
| + if (key == nt::HKCU)
|
| + ASSERT_TRUE(nt::SetTestingOverride(nt::HKCU, base::string16()));
|
| + else
|
| + ASSERT_TRUE(nt::SetTestingOverride(nt::HKLM, base::string16()));
|
| }
|
|
|
| TEST(ChromeElfUtilTest, CanaryTest) {
|
| @@ -108,7 +116,7 @@ TEST(ChromeElfUtilTest, BrowserProcessSecurityTest) {
|
|
|
| // Set up registry override for this test.
|
| registry_util::RegistryOverrideManager override_manager;
|
| - RegRedirect(nt::HKCU, override_manager);
|
| + RegRedirect(nt::HKCU, &override_manager);
|
|
|
| // First, ensure that the emergency-off finch signal works.
|
| EXPECT_TRUE(SetSecurityFinchFlag(true));
|
| @@ -119,112 +127,8 @@ TEST(ChromeElfUtilTest, BrowserProcessSecurityTest) {
|
| // Second, test that the process mitigation is set when no finch signal.
|
| EarlyBrowserSecurity();
|
| EXPECT_TRUE(IsSecuritySet());
|
| -}
|
| -
|
| -//------------------------------------------------------------------------------
|
| -// NT registry API tests (chrome_elf_reg)
|
| -//------------------------------------------------------------------------------
|
| -
|
| -TEST(ChromeElfUtilTest, NTRegistry) {
|
| - HANDLE key_handle;
|
| - const wchar_t* dword_val_name = L"DwordTestValue";
|
| - DWORD dword_val = 1234;
|
| - const wchar_t* sz_val_name = L"SzTestValue";
|
| - base::string16 sz_val = L"blah de blah de blahhhhh.";
|
| - const wchar_t* sz_val_name2 = L"SzTestValueEmpty";
|
| - base::string16 sz_val2 = L"";
|
| - const wchar_t* multisz_val_name = L"SzmultiTestValue";
|
| - std::vector<base::string16> multisz_val;
|
| - base::string16 multi1 = L"one";
|
| - base::string16 multi2 = L"two";
|
| - base::string16 multi3 = L"three";
|
| - const wchar_t* multisz_val_name2 = L"SzmultiTestValueBad";
|
| - base::string16 multi_empty = L"";
|
| - const wchar_t* sz_new_key_1 = L"test\\new\\subkey";
|
| - const wchar_t* sz_new_key_2 = L"test\\new\\subkey\\blah\\";
|
| - const wchar_t* sz_new_key_3 = L"\\test\\new\\subkey\\\\blah2";
|
| -
|
| - // Set up registry override for this test.
|
| - registry_util::RegistryOverrideManager override_manager;
|
| - RegRedirect(nt::HKCU, override_manager);
|
| -
|
| - // Create a temp key to play under.
|
| - ASSERT_TRUE(nt::CreateRegKey(nt::HKCU, elf_sec::kRegSecurityPath,
|
| - KEY_ALL_ACCESS, &key_handle));
|
| -
|
| - // Exercise the supported getter & setter functions.
|
| - EXPECT_TRUE(nt::SetRegValueDWORD(key_handle, dword_val_name, dword_val));
|
| - EXPECT_TRUE(nt::SetRegValueSZ(key_handle, sz_val_name, sz_val));
|
| - EXPECT_TRUE(nt::SetRegValueSZ(key_handle, sz_val_name2, sz_val2));
|
| -
|
| - DWORD get_dword = 0;
|
| - base::string16 get_sz;
|
| - EXPECT_TRUE(nt::QueryRegValueDWORD(key_handle, dword_val_name, &get_dword) &&
|
| - get_dword == dword_val);
|
| - EXPECT_TRUE(nt::QueryRegValueSZ(key_handle, sz_val_name, &get_sz) &&
|
| - get_sz.compare(sz_val) == 0);
|
| - EXPECT_TRUE(nt::QueryRegValueSZ(key_handle, sz_val_name2, &get_sz) &&
|
| - get_sz.compare(sz_val2) == 0);
|
| -
|
| - multisz_val.push_back(multi1);
|
| - multisz_val.push_back(multi2);
|
| - multisz_val.push_back(multi3);
|
| - EXPECT_TRUE(
|
| - nt::SetRegValueMULTISZ(key_handle, multisz_val_name, multisz_val));
|
| - multisz_val.clear();
|
| - multisz_val.push_back(multi_empty);
|
| - EXPECT_TRUE(
|
| - nt::SetRegValueMULTISZ(key_handle, multisz_val_name2, multisz_val));
|
| - multisz_val.clear();
|
| -
|
| - EXPECT_TRUE(
|
| - nt::QueryRegValueMULTISZ(key_handle, multisz_val_name, &multisz_val));
|
| - if (multisz_val.size() == 3) {
|
| - EXPECT_TRUE(multi1.compare(multisz_val.at(0)) == 0);
|
| - EXPECT_TRUE(multi2.compare(multisz_val.at(1)) == 0);
|
| - EXPECT_TRUE(multi3.compare(multisz_val.at(2)) == 0);
|
| - } else {
|
| - EXPECT_TRUE(false);
|
| - }
|
| - multisz_val.clear();
|
|
|
| - EXPECT_TRUE(
|
| - nt::QueryRegValueMULTISZ(key_handle, multisz_val_name2, &multisz_val));
|
| - if (multisz_val.size() == 1) {
|
| - EXPECT_TRUE(multi_empty.compare(multisz_val.at(0)) == 0);
|
| - } else {
|
| - EXPECT_TRUE(false);
|
| - }
|
| - multisz_val.clear();
|
| -
|
| - // Clean up
|
| - EXPECT_TRUE(nt::DeleteRegKey(key_handle));
|
| - nt::CloseRegKey(key_handle);
|
| -
|
| - // More tests for CreateRegKey recursion.
|
| - ASSERT_TRUE(
|
| - nt::CreateRegKey(nt::HKCU, sz_new_key_1, KEY_ALL_ACCESS, nullptr));
|
| - EXPECT_TRUE(nt::OpenRegKey(nt::HKCU, sz_new_key_1, KEY_ALL_ACCESS,
|
| - &key_handle, nullptr));
|
| - EXPECT_TRUE(nt::DeleteRegKey(key_handle));
|
| - nt::CloseRegKey(key_handle);
|
| -
|
| - ASSERT_TRUE(
|
| - nt::CreateRegKey(nt::HKCU, sz_new_key_2, KEY_ALL_ACCESS, nullptr));
|
| - EXPECT_TRUE(nt::OpenRegKey(nt::HKCU, sz_new_key_2, KEY_ALL_ACCESS,
|
| - &key_handle, nullptr));
|
| - EXPECT_TRUE(nt::DeleteRegKey(key_handle));
|
| - nt::CloseRegKey(key_handle);
|
| -
|
| - ASSERT_TRUE(
|
| - nt::CreateRegKey(nt::HKCU, sz_new_key_3, KEY_ALL_ACCESS, nullptr));
|
| - EXPECT_TRUE(nt::OpenRegKey(nt::HKCU, L"test\\new\\subkey\\blah2",
|
| - KEY_ALL_ACCESS, &key_handle, nullptr));
|
| - EXPECT_TRUE(nt::DeleteRegKey(key_handle));
|
| - nt::CloseRegKey(key_handle);
|
| -
|
| - ASSERT_TRUE(nt::CreateRegKey(nt::HKCU, nullptr, KEY_ALL_ACCESS, &key_handle));
|
| - nt::CloseRegKey(key_handle);
|
| + CancelRegRedirect(nt::HKCU);
|
| }
|
|
|
| // Parameterized test with paramters:
|
| @@ -237,8 +141,8 @@ class ChromeElfUtilTest
|
| protected:
|
| void SetUp() override {
|
| // Set up registry override for these tests.
|
| - RegRedirect(nt::HKLM, override_manager_);
|
| - RegRedirect(nt::HKCU, override_manager_);
|
| + RegRedirect(nt::HKLM, &override_manager_);
|
| + RegRedirect(nt::HKCU, &override_manager_);
|
|
|
| const char* app;
|
| const char* level;
|
| @@ -263,6 +167,11 @@ class ChromeElfUtilTest
|
| }
|
| }
|
|
|
| + void TearDown() override {
|
| + CancelRegRedirect(nt::HKCU);
|
| + CancelRegRedirect(nt::HKLM);
|
| + }
|
| +
|
| base::string16 BuildKey(const wchar_t* path, const wchar_t* guid) {
|
| base::string16 full_key_path(path);
|
| full_key_path.append(1, L'\\');
|
|
|