security/sandbox/win/src/win_utils_unittest.cc

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
     2 // Use of this source code is governed by a BSD-style license that can be
     3 // found in the LICENSE file.
     5 #include <windows.h>
     7 #include "base/win/scoped_handle.h"
     8 #include "sandbox/win/src/win_utils.h"
     9 #include "sandbox/win/tests/common/test_utils.h"
    10 #include "testing/gtest/include/gtest/gtest.h"
    12 TEST(WinUtils, IsReparsePoint) {
    13   using sandbox::IsReparsePoint;
    15   // Create a temp file because we need write access to it.
    16   wchar_t temp_directory[MAX_PATH];
    17   wchar_t my_folder[MAX_PATH];
    18   ASSERT_NE(::GetTempPath(MAX_PATH, temp_directory), 0u);
    19   ASSERT_NE(::GetTempFileName(temp_directory, L"test", 0, my_folder), 0u);
    21   // Delete the file and create a directory instead.
    22   ASSERT_TRUE(::DeleteFile(my_folder));
    23   ASSERT_TRUE(::CreateDirectory(my_folder, NULL));
    25   bool result = true;
    26   EXPECT_EQ(ERROR_SUCCESS, IsReparsePoint(my_folder, &result));
    27   EXPECT_FALSE(result);
    29   // We have to fix Bug 32224 to pass this test.
    30   std::wstring not_found = std::wstring(my_folder) + L"\\foo\\bar";
    31   // EXPECT_EQ(ERROR_PATH_NOT_FOUND, IsReparsePoint(not_found, &result));
    33   std::wstring new_file = std::wstring(my_folder) + L"\\foo";
    34   EXPECT_EQ(ERROR_SUCCESS, IsReparsePoint(new_file, &result));
    35   EXPECT_FALSE(result);
    37   // Replace the directory with a reparse point to %temp%.
    38   HANDLE dir = ::CreateFile(my_folder, FILE_ALL_ACCESS,
    39                             FILE_SHARE_READ | FILE_SHARE_WRITE, NULL,
    40                             OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
    41   EXPECT_NE(INVALID_HANDLE_VALUE, dir);
    43   std::wstring temp_dir_nt = std::wstring(L"\\??\\") + temp_directory;
    44   EXPECT_TRUE(SetReparsePoint(dir, temp_dir_nt.c_str()));
    46   EXPECT_EQ(ERROR_SUCCESS, IsReparsePoint(new_file, &result));
    47   EXPECT_TRUE(result);
    49   EXPECT_TRUE(DeleteReparsePoint(dir));
    50   EXPECT_TRUE(::CloseHandle(dir));
    51   EXPECT_TRUE(::RemoveDirectory(my_folder));
    52 }
    54 TEST(WinUtils, SameObject) {
    55   using sandbox::SameObject;
    57   // Create a temp file because we need write access to it.
    58   wchar_t temp_directory[MAX_PATH];
    59   wchar_t my_folder[MAX_PATH];
    60   ASSERT_NE(::GetTempPath(MAX_PATH, temp_directory), 0u);
    61   ASSERT_NE(::GetTempFileName(temp_directory, L"test", 0, my_folder), 0u);
    63   // Delete the file and create a directory instead.
    64   ASSERT_TRUE(::DeleteFile(my_folder));
    65   ASSERT_TRUE(::CreateDirectory(my_folder, NULL));
    67   std::wstring folder(my_folder);
    68   std::wstring file_name = folder + L"\\foo.txt";
    69   const ULONG kSharing = FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE;
    70   base::win::ScopedHandle file(CreateFile(
    71       file_name.c_str(), GENERIC_WRITE, kSharing, NULL, CREATE_ALWAYS,
    72       FILE_FLAG_DELETE_ON_CLOSE, NULL));
    74   EXPECT_TRUE(file.IsValid());
    75   std::wstring file_name_nt1 = std::wstring(L"\\??\\") + file_name;
    76   std::wstring file_name_nt2 = std::wstring(L"\\??\\") + folder + L"\\FOO.txT";
    77   EXPECT_TRUE(SameObject(file.Get(), file_name_nt1.c_str()));
    78   EXPECT_TRUE(SameObject(file.Get(), file_name_nt2.c_str()));
    80   file.Close();
    81   EXPECT_TRUE(::RemoveDirectory(my_folder));
    82 }

mercurial