Bug 1975674 - Add null check to nsIFile::Contains on Windows a=pascalc
+ add basic unit tests, run with: `./mach gtest TestFile.*` Original Revision: https://phabricator.services.mozilla.com/D256255 Differential Revision: https://phabricator.services.mozilla.com/D256620
This commit is contained in:
committed by
pchevrel@mozilla.com
parent
d091240018
commit
8fb576c0af
@@ -3139,6 +3139,12 @@ NS_IMETHODIMP
|
||||
nsLocalFile::Contains(nsIFile* aInFile, bool* aResult) {
|
||||
// Check we are correctly initialized.
|
||||
CHECK_mWorkingPath();
|
||||
if (NS_WARN_IF(!aInFile)) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
if (NS_WARN_IF(!aResult)) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
*aResult = false;
|
||||
|
||||
|
||||
@@ -362,6 +362,44 @@ static bool TestParent(nsIFile* aBase, nsIFile* aStart) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Test nsIFile::Contains
|
||||
static bool TestContains(nsIFile* aBase) {
|
||||
nsCOMPtr<nsIFile> sub = NewFile(aBase);
|
||||
if (!sub) return false;
|
||||
nsresult rv = sub->AppendNative(nsDependentCString("sub"));
|
||||
if (!VerifyResult(rv, "AppendNative sub")) return false;
|
||||
|
||||
nsCOMPtr<nsIFile> subSlashSub = NewFile(sub);
|
||||
if (!subSlashSub) return false;
|
||||
rv = subSlashSub->AppendNative(nsDependentCString("sub"));
|
||||
if (!VerifyResult(rv, "AppendNative sub/sub")) return false;
|
||||
|
||||
nsCOMPtr<nsIFile> subsub = NewFile(aBase);
|
||||
if (!subsub) return false;
|
||||
rv = subsub->AppendNative(nsDependentCString("subsub"));
|
||||
if (!VerifyResult(rv, "AppendNative subsub")) return false;
|
||||
|
||||
bool contains;
|
||||
rv = sub->Contains(subsub, &contains);
|
||||
VerifyResult(rv, "sub contains subsub");
|
||||
EXPECT_FALSE(contains) << "sub contains subsub is false";
|
||||
|
||||
rv = sub->Contains(sub, &contains);
|
||||
VerifyResult(rv, "sub contains sub (itself)");
|
||||
EXPECT_FALSE(contains) << "sub contains sub (itself) is false";
|
||||
|
||||
rv = sub->Contains(subSlashSub, &contains);
|
||||
VerifyResult(rv, "sub contains sub/sub");
|
||||
EXPECT_TRUE(contains) << "sub contains sub/sub is true";
|
||||
|
||||
// Regression test for bug 1975674: Contains null should not crash.
|
||||
rv = sub->Contains(nullptr, &contains);
|
||||
EXPECT_NS_FAILED(rv) << "Contains null fails";
|
||||
EXPECT_EQ(rv, NS_ERROR_INVALID_ARG) << "rv for contains(null)";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Test nsIFile::Normalize and native path setting/getting
|
||||
static bool TestNormalizeNativePath(nsIFile* aBase, nsIFile* aStart) {
|
||||
nsCOMPtr<nsIFile> file = NewFile(aStart);
|
||||
@@ -473,6 +511,9 @@ static void SetupAndTestFunctions(const nsAString& aDirName,
|
||||
ASSERT_TRUE(TestInvalidFileName(base, "a/b"));
|
||||
ASSERT_TRUE(TestParent(base, subdir));
|
||||
|
||||
// Test nsIFile::Contains
|
||||
ASSERT_TRUE(TestContains(base));
|
||||
|
||||
// Test file creation
|
||||
ASSERT_TRUE(TestCreate(base, "file.txt", nsIFile::NORMAL_FILE_TYPE, 0600));
|
||||
ASSERT_TRUE(TestRemove(base, "file.txt", false));
|
||||
|
||||
Reference in New Issue
Block a user