| Index: tests/limited_file_access/limited_file_access.cc
|
| diff --git a/tests/limited_file_access/limited_file_access.cc b/tests/limited_file_access/limited_file_access.cc
|
| index 77de1cf79acb58470479c977dfbfa3c1e0f65bf3..8308efa50aea34923d38dad97ab4b29c1743aaee 100644
|
| --- a/tests/limited_file_access/limited_file_access.cc
|
| +++ b/tests/limited_file_access/limited_file_access.cc
|
| @@ -74,12 +74,13 @@ void do_test_write_read_file(const char *filename, bool new_file) {
|
|
|
| void test_directory_walk() {
|
| // Attempt to walk down valid directory structure (and back again).
|
| - ASSERT_EQ_MSG(chdir("/"), 0, "chdir() failed");
|
| -
|
| char dirname[PATH_MAX];
|
| ASSERT_NE_MSG(getcwd(dirname, PATH_MAX), NULL, "getcwd() failed");
|
| ASSERT_EQ(strcmp(dirname, "/"), 0);
|
|
|
| + ASSERT_EQ_MSG(chdir("."), 0, "chdir() failed");
|
| + ASSERT_EQ_MSG(chdir("/"), 0, "chdir() failed");
|
| +
|
| DIR *d = opendir(dirname);
|
| ASSERT_NE_MSG(d, NULL, "opendir() failed");
|
| int count = 0;
|
| @@ -127,9 +128,16 @@ void test_directory_walk() {
|
| ASSERT(current_directory_seen);
|
| ASSERT_EQ(count, 5);
|
|
|
| + // Chdir with relative path name
|
| + ASSERT_EQ_MSG(chdir(g_temp_sub_dir_name), 0, "chdir() failed");
|
| + ASSERT_NE_MSG(getcwd(dirname, PATH_MAX), NULL, "getcwd() failed");
|
| + ASSERT_EQ(strcmp(dirname, g_temp_sub_dir_path), 0);
|
| +
|
| + // Chdir with absolute path name
|
| ASSERT_EQ_MSG(chdir(g_temp_sub_dir_path), 0, "chdir() failed");
|
| ASSERT_NE_MSG(getcwd(dirname, PATH_MAX), NULL, "getcwd() failed");
|
| ASSERT_EQ(strcmp(dirname, g_temp_sub_dir_path), 0);
|
| +
|
| d = opendir(dirname);
|
| count = 0;
|
|
|
| @@ -180,9 +188,9 @@ void test_new_directory_access() {
|
| ASSERT_EQ(mkdir("/test_dir/", mode), 0);
|
| ASSERT_EQ(rmdir("/test_dir/"), 0);
|
|
|
| - // Cannot make directory using relative path.
|
| - ASSERT_EQ(mkdir("test_dir/", mode), -1);
|
| - ASSERT_EQ(errno, EACCES);
|
| + // Test that relative paths can also be used.
|
| + ASSERT_EQ(mkdir("test_dir", mode), 0);
|
| + ASSERT_EQ(rmdir("test_dir"), 0);
|
|
|
| char file_name[PATH_MAX];
|
| snprintf(file_name, PATH_MAX, "%s/test_dir", g_temp_sub_dir_path);
|
| @@ -298,10 +306,7 @@ void test_information_leak() {
|
| ASSERT_EQ(stat("//", &buf), 0);
|
| ASSERT_EQ(stat("/./.", &buf), 0);
|
| ASSERT_EQ(stat("/./////.", &buf), 0);
|
| -
|
| - // We should not be able to access relative paths.
|
| - ASSERT_EQ(stat(".", &buf), -1);
|
| - ASSERT_EQ(errno, EACCES);
|
| + ASSERT_EQ(stat(".", &buf), 0);
|
|
|
| // We should not be able to access paths containing "..".
|
| snprintf(path, PATH_MAX, "%s/..", g_temp_sub_dir_path);
|
| @@ -330,16 +335,29 @@ void test_valid_file_access() {
|
| // Show that reads and writes to valid files work.
|
| char file_name[PATH_MAX];
|
|
|
| + // Absolute path
|
| snprintf(file_name, PATH_MAX, "%s", g_temp_file_path);
|
| - do_test_write_read_file(file_name, false);
|
| + do_test_write_read_file(file_name, /* new_file= */ false);
|
| +
|
| + // Relative path
|
| + snprintf(file_name, PATH_MAX, "%s", g_temp_file_name);
|
| + do_test_write_read_file(file_name, /* new_file= */ false);
|
|
|
| + // Absolute path
|
| snprintf(file_name, PATH_MAX, "%s/%s", g_temp_sub_dir_path,
|
| g_temp_sub_file_name);
|
| - do_test_write_read_file(file_name, false);
|
| + do_test_write_read_file(file_name, /* new_file= */ false);
|
|
|
| - snprintf(file_name, PATH_MAX, "%s/%s", g_temp_sub_dir_path,
|
| + // Relative path
|
| + snprintf(file_name, PATH_MAX, "%s/%s", g_temp_sub_dir_name,
|
| g_temp_sub_file_name);
|
| - do_test_write_read_file(file_name, false);
|
| + do_test_write_read_file(file_name, /* new_file= */ false);
|
| +
|
| + ASSERT_EQ_MSG(chdir(g_temp_sub_dir_name), 0, "chdir() failed");
|
| +
|
| + // Relative path
|
| + snprintf(file_name, PATH_MAX, "%s", g_temp_sub_file_name);
|
| + do_test_write_read_file(file_name, /* new_file= */ false);
|
|
|
| passed("test_valid_file_access", "all");
|
| }
|
|
|