| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "build/build_config.h" | 5 #include "build/build_config.h" |
| 6 | 6 |
| 7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
| 8 #include <windows.h> | 8 #include <windows.h> |
| 9 #include <shellapi.h> | 9 #include <shellapi.h> |
| 10 #include <shlobj.h> | 10 #include <shlobj.h> |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 {L"/foo/bar./", L""}, | 295 {L"/foo/bar./", L""}, |
| 296 {L"/foo/bar/filename.extension.extension2", L"extension2"}, | 296 {L"/foo/bar/filename.extension.extension2", L"extension2"}, |
| 297 {L".", L""}, | 297 {L".", L""}, |
| 298 {L"..", L""}, | 298 {L"..", L""}, |
| 299 {L"./foo", L""}, | 299 {L"./foo", L""}, |
| 300 {L"./foo.extension", L"extension"}, | 300 {L"./foo.extension", L"extension"}, |
| 301 {L"/foo.extension1/bar.extension2", L"extension2"}, | 301 {L"/foo.extension1/bar.extension2", L"extension2"}, |
| 302 #endif | 302 #endif |
| 303 }; | 303 }; |
| 304 | 304 |
| 305 #if defined(OS_WIN) | |
| 306 // This function has been deprecated on non-Windows. | |
| 307 TEST_F(FileUtilTest, GetFileExtensionFromPath) { | |
| 308 for (unsigned int i = 0; i < arraysize(extension_cases); ++i) { | |
| 309 const extension_case& ext = extension_cases[i]; | |
| 310 const std::wstring fext = file_util::GetFileExtensionFromPath(ext.path); | |
| 311 EXPECT_EQ(ext.extension, fext); | |
| 312 } | |
| 313 } | |
| 314 #endif | |
| 315 | |
| 316 // Test finding the directory component of a path | 305 // Test finding the directory component of a path |
| 317 static const struct dir_case { | 306 static const struct dir_case { |
| 318 const wchar_t* full_path; | 307 const wchar_t* full_path; |
| 319 const wchar_t* directory; | 308 const wchar_t* directory; |
| 320 } dir_cases[] = { | 309 } dir_cases[] = { |
| 321 #if defined(OS_WIN) | 310 #if defined(OS_WIN) |
| 322 {L"C:\\WINDOWS\\system32\\gdi32.dll", L"C:\\WINDOWS\\system32"}, | 311 {L"C:\\WINDOWS\\system32\\gdi32.dll", L"C:\\WINDOWS\\system32"}, |
| 323 {L"C:\\WINDOWS\\system32\\not_exist_thx_1138", L"C:\\WINDOWS\\system32"}, | 312 {L"C:\\WINDOWS\\system32\\not_exist_thx_1138", L"C:\\WINDOWS\\system32"}, |
| 324 {L"C:\\WINDOWS\\system32\\", L"C:\\WINDOWS\\system32"}, | 313 {L"C:\\WINDOWS\\system32\\", L"C:\\WINDOWS\\system32"}, |
| 325 {L"C:\\WINDOWS\\system32\\\\", L"C:\\WINDOWS\\system32"}, | 314 {L"C:\\WINDOWS\\system32\\\\", L"C:\\WINDOWS\\system32"}, |
| (...skipping 1115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1441 | 1430 |
| 1442 // We don't need equivalent functionality outside of Windows. | 1431 // We don't need equivalent functionality outside of Windows. |
| 1443 #if defined(OS_WIN) | 1432 #if defined(OS_WIN) |
| 1444 TEST_F(FileUtilTest, ResolveShortcutTest) { | 1433 TEST_F(FileUtilTest, ResolveShortcutTest) { |
| 1445 FilePath target_file = temp_dir_.path().Append(L"Target.txt"); | 1434 FilePath target_file = temp_dir_.path().Append(L"Target.txt"); |
| 1446 CreateTextFile(target_file, L"This is the target."); | 1435 CreateTextFile(target_file, L"This is the target."); |
| 1447 | 1436 |
| 1448 FilePath link_file = temp_dir_.path().Append(L"Link.lnk"); | 1437 FilePath link_file = temp_dir_.path().Append(L"Link.lnk"); |
| 1449 | 1438 |
| 1450 HRESULT result; | 1439 HRESULT result; |
| 1451 IShellLink *shell = NULL; | 1440 IShellLink* shell = NULL; |
| 1452 IPersistFile *persist = NULL; | 1441 IPersistFile* persist = NULL; |
| 1453 | 1442 |
| 1454 CoInitialize(NULL); | 1443 CoInitialize(NULL); |
| 1455 // Temporarily create a shortcut for test | 1444 // Temporarily create a shortcut for test |
| 1456 result = CoCreateInstance(CLSID_ShellLink, NULL, | 1445 result = CoCreateInstance(CLSID_ShellLink, NULL, |
| 1457 CLSCTX_INPROC_SERVER, IID_IShellLink, | 1446 CLSCTX_INPROC_SERVER, IID_IShellLink, |
| 1458 reinterpret_cast<LPVOID*>(&shell)); | 1447 reinterpret_cast<LPVOID*>(&shell)); |
| 1459 EXPECT_TRUE(SUCCEEDED(result)); | 1448 EXPECT_TRUE(SUCCEEDED(result)); |
| 1460 result = shell->QueryInterface(IID_IPersistFile, | 1449 result = shell->QueryInterface(IID_IPersistFile, |
| 1461 reinterpret_cast<LPVOID*>(&persist)); | 1450 reinterpret_cast<LPVOID*>(&persist)); |
| 1462 EXPECT_TRUE(SUCCEEDED(result)); | 1451 EXPECT_TRUE(SUCCEEDED(result)); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1572 EXPECT_FALSE(file_util::DirectoryExists(temp_files[i])); | 1561 EXPECT_FALSE(file_util::DirectoryExists(temp_files[i])); |
| 1573 } | 1562 } |
| 1574 for (int i = 0; i < 3; i++) | 1563 for (int i = 0; i < 3; i++) |
| 1575 EXPECT_FALSE(temp_files[i] == temp_files[(i+1)%3]); | 1564 EXPECT_FALSE(temp_files[i] == temp_files[(i+1)%3]); |
| 1576 for (int i = 0; i < 3; i++) | 1565 for (int i = 0; i < 3; i++) |
| 1577 EXPECT_TRUE(file_util::Delete(temp_files[i], false)); | 1566 EXPECT_TRUE(file_util::Delete(temp_files[i], false)); |
| 1578 } | 1567 } |
| 1579 | 1568 |
| 1580 TEST_F(FileUtilTest, CreateAndOpenTemporaryFileTest) { | 1569 TEST_F(FileUtilTest, CreateAndOpenTemporaryFileTest) { |
| 1581 FilePath names[3]; | 1570 FilePath names[3]; |
| 1582 FILE *fps[3]; | 1571 FILE* fps[3]; |
| 1583 int i; | 1572 int i; |
| 1584 | 1573 |
| 1585 // Create; make sure they are open and exist. | 1574 // Create; make sure they are open and exist. |
| 1586 for (i = 0; i < 3; ++i) { | 1575 for (i = 0; i < 3; ++i) { |
| 1587 fps[i] = file_util::CreateAndOpenTemporaryFile(&(names[i])); | 1576 fps[i] = file_util::CreateAndOpenTemporaryFile(&(names[i])); |
| 1588 ASSERT_TRUE(fps[i]); | 1577 ASSERT_TRUE(fps[i]); |
| 1589 EXPECT_TRUE(file_util::PathExists(names[i])); | 1578 EXPECT_TRUE(file_util::PathExists(names[i])); |
| 1590 } | 1579 } |
| 1591 | 1580 |
| 1592 // Make sure all names are unique. | 1581 // Make sure all names are unique. |
| (...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1947 ok_gids_.insert(stat_buf.st_gid); | 1936 ok_gids_.insert(stat_buf.st_gid); |
| 1948 bad_gids_.insert(stat_buf.st_gid + 1); | 1937 bad_gids_.insert(stat_buf.st_gid + 1); |
| 1949 | 1938 |
| 1950 ASSERT_EQ(uid_, getuid()); // This process should be the owner. | 1939 ASSERT_EQ(uid_, getuid()); // This process should be the owner. |
| 1951 | 1940 |
| 1952 // To ensure that umask settings do not cause the initial state | 1941 // To ensure that umask settings do not cause the initial state |
| 1953 // of permissions to be different from what we expect, explicitly | 1942 // of permissions to be different from what we expect, explicitly |
| 1954 // set permissions on the directories we create. | 1943 // set permissions on the directories we create. |
| 1955 // Make all files and directories non-world-writable. | 1944 // Make all files and directories non-world-writable. |
| 1956 mode_t enabled_permissions = | 1945 mode_t enabled_permissions = |
| 1957 S_IRWXU | // User can read, write, traverse | 1946 S_IRWXU | // User can read, write, traverse |
| 1958 S_IRWXG; // Group can read, write, traverse | 1947 S_IRWXG; // Group can read, write, traverse |
| 1959 mode_t disabled_permissions = | 1948 mode_t disabled_permissions = |
| 1960 S_IRWXO; // Other users can't read, write, traverse. | 1949 S_IRWXO; // Other users can't read, write, traverse. |
| 1961 | 1950 |
| 1962 ASSERT_NO_FATAL_FAILURE( | 1951 ASSERT_NO_FATAL_FAILURE( |
| 1963 ChangePosixFilePermissions( | 1952 ChangePosixFilePermissions( |
| 1964 base_dir_, enabled_permissions, disabled_permissions)); | 1953 base_dir_, enabled_permissions, disabled_permissions)); |
| 1965 ASSERT_NO_FATAL_FAILURE( | 1954 ASSERT_NO_FATAL_FAILURE( |
| 1966 ChangePosixFilePermissions( | 1955 ChangePosixFilePermissions( |
| 1967 sub_dir_, enabled_permissions, disabled_permissions)); | 1956 sub_dir_, enabled_permissions, disabled_permissions)); |
| 1968 } | 1957 } |
| 1969 | 1958 |
| 1970 FilePath base_dir_; | 1959 FilePath base_dir_; |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2169 | 2158 |
| 2170 EXPECT_TRUE( | 2159 EXPECT_TRUE( |
| 2171 file_util::VerifyPathControlledByUser( | 2160 file_util::VerifyPathControlledByUser( |
| 2172 base_dir_, sub_dir_, uid_, multiple_gids)); | 2161 base_dir_, sub_dir_, uid_, multiple_gids)); |
| 2173 EXPECT_TRUE( | 2162 EXPECT_TRUE( |
| 2174 file_util::VerifyPathControlledByUser( | 2163 file_util::VerifyPathControlledByUser( |
| 2175 base_dir_, text_file_, uid_, multiple_gids)); | 2164 base_dir_, text_file_, uid_, multiple_gids)); |
| 2176 EXPECT_TRUE( | 2165 EXPECT_TRUE( |
| 2177 file_util::VerifyPathControlledByUser( | 2166 file_util::VerifyPathControlledByUser( |
| 2178 sub_dir_, text_file_, uid_, multiple_gids)); | 2167 sub_dir_, text_file_, uid_, multiple_gids)); |
| 2179 | |
| 2180 } | 2168 } |
| 2181 | 2169 |
| 2182 TEST_F(VerifyPathControlledByUserTest, WriteBitChecks) { | 2170 TEST_F(VerifyPathControlledByUserTest, WriteBitChecks) { |
| 2183 // Make all files and directories non-world-writable. | 2171 // Make all files and directories non-world-writable. |
| 2184 ASSERT_NO_FATAL_FAILURE( | 2172 ASSERT_NO_FATAL_FAILURE( |
| 2185 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); | 2173 ChangePosixFilePermissions(base_dir_, 0u, S_IWOTH)); |
| 2186 ASSERT_NO_FATAL_FAILURE( | 2174 ASSERT_NO_FATAL_FAILURE( |
| 2187 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); | 2175 ChangePosixFilePermissions(sub_dir_, 0u, S_IWOTH)); |
| 2188 ASSERT_NO_FATAL_FAILURE( | 2176 ASSERT_NO_FATAL_FAILURE( |
| 2189 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); | 2177 ChangePosixFilePermissions(text_file_, 0u, S_IWOTH)); |
| 2190 | 2178 |
| 2191 // Initialy, we control all parts of the path. | 2179 // Initialy, we control all parts of the path. |
| 2192 EXPECT_TRUE( | 2180 EXPECT_TRUE( |
| 2193 file_util::VerifyPathControlledByUser( | 2181 file_util::VerifyPathControlledByUser( |
| 2194 base_dir_, sub_dir_, uid_, ok_gids_)); | 2182 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2195 EXPECT_TRUE( | 2183 EXPECT_TRUE( |
| 2196 file_util::VerifyPathControlledByUser( | 2184 file_util::VerifyPathControlledByUser( |
| 2197 base_dir_, text_file_, uid_, ok_gids_)); | 2185 base_dir_, text_file_, uid_, ok_gids_)); |
| 2198 EXPECT_TRUE( | 2186 EXPECT_TRUE( |
| 2199 file_util::VerifyPathControlledByUser( | 2187 file_util::VerifyPathControlledByUser( |
| 2200 sub_dir_, text_file_, uid_, ok_gids_)); | 2188 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2201 | 2189 |
| 2202 // Make base_dir_ world-writable. | 2190 // Make base_dir_ world-writable. |
| 2203 ASSERT_NO_FATAL_FAILURE( | 2191 ASSERT_NO_FATAL_FAILURE( |
| 2204 ChangePosixFilePermissions(base_dir_, S_IWOTH, 0u)); | 2192 ChangePosixFilePermissions(base_dir_, S_IWOTH, 0u)); |
| 2205 EXPECT_FALSE( | 2193 EXPECT_FALSE( |
| 2206 file_util::VerifyPathControlledByUser( | 2194 file_util::VerifyPathControlledByUser( |
| 2207 base_dir_, sub_dir_, uid_, ok_gids_)); | 2195 base_dir_, sub_dir_, uid_, ok_gids_)); |
| 2208 EXPECT_FALSE( | 2196 EXPECT_FALSE( |
| 2209 file_util::VerifyPathControlledByUser( | 2197 file_util::VerifyPathControlledByUser( |
| 2210 base_dir_, text_file_, uid_, ok_gids_)); | 2198 base_dir_, text_file_, uid_, ok_gids_)); |
| 2211 EXPECT_TRUE( | 2199 EXPECT_TRUE( |
| 2212 file_util::VerifyPathControlledByUser( | 2200 file_util::VerifyPathControlledByUser( |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2275 file_util::VerifyPathControlledByUser( | 2263 file_util::VerifyPathControlledByUser( |
| 2276 base_dir_, text_file_, uid_, ok_gids_)); | 2264 base_dir_, text_file_, uid_, ok_gids_)); |
| 2277 EXPECT_TRUE( | 2265 EXPECT_TRUE( |
| 2278 file_util::VerifyPathControlledByUser( | 2266 file_util::VerifyPathControlledByUser( |
| 2279 sub_dir_, text_file_, uid_, ok_gids_)); | 2267 sub_dir_, text_file_, uid_, ok_gids_)); |
| 2280 } | 2268 } |
| 2281 | 2269 |
| 2282 #endif // defined(OS_POSIX) | 2270 #endif // defined(OS_POSIX) |
| 2283 | 2271 |
| 2284 } // namespace | 2272 } // namespace |
| OLD | NEW |