1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
|
#include "gtest/gtest.h"
#include "mozilla/FilePreferences.h"
#include "nsComponentManagerUtils.h"
#include "nsDirectoryServiceDefs.h"
#include "nsIFile.h"
#include "nsLocalFile.h"
#include "nsXPCOMCID.h"
TEST(FilePreferencesWin, Normalization)
{
nsAutoString normalized;
mozilla::FilePreferences::testing::NormalizePath(u"foo"_ns, normalized);
ASSERT_TRUE(normalized == u"foo"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\foo"_ns, normalized);
ASSERT_TRUE(normalized == u"\\foo"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo"_ns, normalized);
ASSERT_TRUE(normalized == u"\\\\foo"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"foo\\some"_ns, normalized);
ASSERT_TRUE(normalized == u"foo\\some"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\.\\foo"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\foo"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\."_ns, normalized);
ASSERT_TRUE(normalized == u"\\\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\.\\"_ns, normalized);
ASSERT_TRUE(normalized == u"\\\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\.\\."_ns, normalized);
ASSERT_TRUE(normalized == u"\\\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\bar"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\foo\\bar"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\bar\\"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\foo\\bar\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\bar\\."_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\foo\\bar\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\bar\\.\\"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\foo\\bar\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\bar\\..\\"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\foo\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\bar\\.."_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\foo\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\..\\bar\\..\\"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\..\\bar"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\bar"_ns);
mozilla::FilePreferences::testing::NormalizePath(u"\\\\foo\\bar\\..\\..\\"_ns,
normalized);
ASSERT_TRUE(normalized == u"\\\\"_ns);
mozilla::FilePreferences::testing::NormalizePath(
u"\\\\foo\\bar\\.\\..\\.\\..\\"_ns, normalized);
ASSERT_TRUE(normalized == u"\\\\"_ns);
bool result;
result = mozilla::FilePreferences::testing::NormalizePath(u"\\\\.."_ns,
normalized);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::testing::NormalizePath(u"\\\\..\\"_ns,
normalized);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::testing::NormalizePath(u"\\\\.\\..\\"_ns,
normalized);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::testing::NormalizePath(
u"\\\\foo\\\\bar"_ns, normalized);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::testing::NormalizePath(
u"\\\\foo\\bar\\..\\..\\..\\..\\"_ns, normalized);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::testing::NormalizePath(u"\\\\\\"_ns,
normalized);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::testing::NormalizePath(u"\\\\.\\\\"_ns,
normalized);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::testing::NormalizePath(u"\\\\..\\\\"_ns,
normalized);
ASSERT_FALSE(result);
}
TEST(FilePreferencesWin, AccessUNC)
{
nsCOMPtr<nsIFile> lf = new nsLocalFile();
nsresult rv;
mozilla::FilePreferences::testing::SetBlockUNCPaths(false);
rv = lf->InitWithPath(u"\\\\nice\\..\\evil\\share"_ns);
ASSERT_EQ(rv, NS_OK);
mozilla::FilePreferences::testing::SetBlockUNCPaths(true);
rv = lf->InitWithPath(u"\\\\nice\\..\\evil\\share"_ns);
ASSERT_EQ(rv, NS_ERROR_FILE_ACCESS_DENIED);
mozilla::FilePreferences::testing::AddDirectoryToAllowlist(u"\\\\nice"_ns);
rv = lf->InitWithPath(u"\\\\nice\\share"_ns);
ASSERT_EQ(rv, NS_OK);
rv = lf->InitWithPath(u"\\\\nice\\..\\evil\\share"_ns);
ASSERT_EQ(rv, NS_ERROR_FILE_ACCESS_DENIED);
}
TEST(FilePreferencesWin, AccessDOSDevicePath)
{
const auto devicePathSpecifier = u"\\\\?\\"_ns;
nsCOMPtr<nsIFile> lf = new nsLocalFile();
nsresult rv;
mozilla::FilePreferences::testing::SetBlockUNCPaths(true);
rv = lf->InitWithPath(devicePathSpecifier + u"evil\\z:\\share"_ns);
ASSERT_EQ(rv, NS_ERROR_FILE_ACCESS_DENIED);
rv = lf->InitWithPath(devicePathSpecifier + u"UNC\\evil\\share"_ns);
ASSERT_EQ(rv, NS_ERROR_FILE_ACCESS_DENIED);
rv = lf->InitWithPath(devicePathSpecifier + u"C:\\"_ns);
ASSERT_EQ(rv, NS_OK);
nsCOMPtr<nsIFile> base;
rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(base));
ASSERT_EQ(rv, NS_OK);
nsAutoString path;
rv = base->GetPath(path);
ASSERT_EQ(rv, NS_OK);
rv = lf->InitWithPath(devicePathSpecifier + path);
ASSERT_EQ(rv, NS_OK);
}
TEST(FilePreferencesWin, StartsWithDiskDesignatorAndBackslash)
{
bool result;
result = mozilla::FilePreferences::StartsWithDiskDesignatorAndBackslash(
u"\\\\UNC\\path"_ns);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::StartsWithDiskDesignatorAndBackslash(
u"\\single\\backslash"_ns);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::StartsWithDiskDesignatorAndBackslash(
u"C:relative"_ns);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::StartsWithDiskDesignatorAndBackslash(
u"\\\\?\\C:\\"_ns);
ASSERT_FALSE(result);
result = mozilla::FilePreferences::StartsWithDiskDesignatorAndBackslash(
u"C:\\"_ns);
ASSERT_TRUE(result);
result = mozilla::FilePreferences::StartsWithDiskDesignatorAndBackslash(
u"c:\\"_ns);
ASSERT_TRUE(result);
}
|