зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset eb32954c1f4c (bug 1769094) for causing multiple failures.
This commit is contained in:
Родитель
2bea2f32be
Коммит
8cfdac9a59
|
@ -69,9 +69,8 @@ interface nsIFile : nsISupports
|
|||
*
|
||||
* @param node
|
||||
* A string which is intended to be a child node of the nsIFile.
|
||||
* For security reasons, this cannot contain .. and cannot start with
|
||||
* a directory separator. For the |appendNative| method, the node must
|
||||
* be in the native filesystem charset.
|
||||
* For the |appendNative| method, the node must be in the native
|
||||
* filesystem charset.
|
||||
*/
|
||||
void append(in AString node);
|
||||
[noscript] void appendNative(in ACString node);
|
||||
|
@ -464,7 +463,7 @@ interface nsIFile : nsISupports
|
|||
*
|
||||
* @param relativeFilePath
|
||||
* relativeFilePath is a native relative path. For security reasons,
|
||||
* this cannot contain .. and cannot start with a directory separator.
|
||||
* this cannot contain .. or cannot start with a directory separator.
|
||||
* For the |appendRelativeNativePath| method, the relativeFilePath
|
||||
* must be in the native filesystem charset.
|
||||
*/
|
||||
|
|
|
@ -560,10 +560,9 @@ nsLocalFile::AppendNative(const nsACString& aFragment) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// only one component of path can be appended and cannot append ".."
|
||||
// only one component of path can be appended
|
||||
nsACString::const_iterator begin, end;
|
||||
if (aFragment.EqualsASCII("..") ||
|
||||
FindCharInReadable('/', aFragment.BeginReading(begin),
|
||||
if (FindCharInReadable('/', aFragment.BeginReading(begin),
|
||||
aFragment.EndReading(end))) {
|
||||
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
|
||||
}
|
||||
|
@ -577,35 +576,11 @@ nsLocalFile::AppendRelativeNativePath(const nsACString& aFragment) {
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// No leading '/' and cannot be ".."
|
||||
if (aFragment.First() == '/' || aFragment.EqualsASCII("..")) {
|
||||
// No leading '/'
|
||||
if (aFragment.First() == '/') {
|
||||
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
|
||||
}
|
||||
|
||||
if (aFragment.Contains('/')) {
|
||||
// can't contain .. as a path component. Ensure that the valid components
|
||||
// "foo..foo", "..foo", and "foo.." are not falsely detected,
|
||||
// but the invalid paths "../", "foo/..", "foo/../foo",
|
||||
// "../foo", etc are.
|
||||
constexpr auto doubleDot = "/.."_ns;
|
||||
nsACString::const_iterator start, end, offset;
|
||||
aFragment.BeginReading(start);
|
||||
aFragment.EndReading(end);
|
||||
offset = end;
|
||||
while (FindInReadable(doubleDot, start, offset)) {
|
||||
if (offset == end || *offset == '/') {
|
||||
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
|
||||
}
|
||||
start = offset;
|
||||
offset = end;
|
||||
}
|
||||
|
||||
// catches the remaining cases of prefixes
|
||||
if (StringBeginsWith(aFragment, "../"_ns)) {
|
||||
return NS_ERROR_FILE_UNRECOGNIZED_PATH;
|
||||
}
|
||||
}
|
||||
|
||||
if (!mPath.EqualsLiteral("/")) {
|
||||
mPath.Append('/');
|
||||
}
|
||||
|
|
|
@ -183,27 +183,3 @@ add_task(
|
|||
file.remove(true);
|
||||
}
|
||||
);
|
||||
|
||||
add_task(function test_file_append_parent() {
|
||||
const SEPARATOR = AppConstants.platform === "win" ? "\\" : "/";
|
||||
|
||||
const file = do_get_profile();
|
||||
|
||||
Assert.throws(
|
||||
() => file.append(".."),
|
||||
/NS_ERROR_FILE_UNRECOGNIZED_PATH/,
|
||||
`nsLocalFile::Append("..") throws`
|
||||
);
|
||||
|
||||
Assert.throws(
|
||||
() => file.appendRelativePath(".."),
|
||||
/NS_ERROR_FILE_UNRECOGNIZED_PATH/,
|
||||
`nsLocalFile::AppendRelativePath("..") throws`
|
||||
);
|
||||
|
||||
Assert.throws(
|
||||
() => file.appendRelativePath(`foo${SEPARATOR}..${SEPARATOR}baz`),
|
||||
/NS_ERROR_FILE_UNRECOGNIZED_PATH/,
|
||||
`nsLocalFile::AppendRelativePath(path) fails when path contains ".."`
|
||||
);
|
||||
});
|
||||
|
|
Загрузка…
Ссылка в новой задаче