Make base::ReadFileToString() return false on I/O error.
It seems inconsistent that ReadFileToString() currently returns false when encountering a file open error but true upon file read error. This CL forces the return value to false upon encountering any kind of error and documents this behaviour.
At that occasion, a test for path traversal prevention is added.
BUG=none
Review URL: https://codereview.chromium.org/254333002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267507 0039d316-1c4b-4281-b951-d872f2087c98
CrOS-Libchrome-Original-Commit: 731daa1a55f46d844aeb6d5d0ffbb8242c39d7b9
diff --git a/base/file_util_unittest.cc b/base/file_util_unittest.cc
index 0d79391..9acdf3e 100644
--- a/base/file_util_unittest.cc
+++ b/base/file_util_unittest.cc
@@ -2012,7 +2012,12 @@
FilePath file_path =
temp_dir_.path().Append(FILE_PATH_LITERAL("ReadFileToStringTest"));
+ FilePath file_path_dangerous =
+ temp_dir_.path().Append(FILE_PATH_LITERAL("..")).
+ Append(temp_dir_.path().BaseName()).
+ Append(FILE_PATH_LITERAL("ReadFileToStringTest"));
+ // Create test file.
ASSERT_EQ(4, WriteFile(file_path, kTestData, 4));
EXPECT_TRUE(ReadFileToString(file_path, &data));
@@ -2020,7 +2025,7 @@
data = "temp";
EXPECT_FALSE(ReadFileToString(file_path, &data, 0));
- EXPECT_EQ(data.length(), 0u);
+ EXPECT_EQ(0u, data.length());
data = "temp";
EXPECT_FALSE(ReadFileToString(file_path, &data, 2));
@@ -2042,15 +2047,20 @@
EXPECT_TRUE(ReadFileToString(file_path, NULL));
+ data = "temp";
+ EXPECT_FALSE(ReadFileToString(file_path_dangerous, &data));
+ EXPECT_EQ(0u, data.length());
+
+ // Delete test file.
EXPECT_TRUE(base::DeleteFile(file_path, false));
data = "temp";
EXPECT_FALSE(ReadFileToString(file_path, &data));
- EXPECT_EQ(data.length(), 0u);
+ EXPECT_EQ(0u, data.length());
data = "temp";
EXPECT_FALSE(ReadFileToString(file_path, &data, 6));
- EXPECT_EQ(data.length(), 0u);
+ EXPECT_EQ(0u, data.length());
}
TEST_F(FileUtilTest, TouchFile) {