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:
Rob Wu
2025-07-09 20:19:08 +00:00
committed by pchevrel@mozilla.com
parent d091240018
commit 8fb576c0af
2 changed files with 47 additions and 0 deletions

View File

@@ -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;

View File

@@ -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));