Merge remote-tracking branch 'origin/tracking' into custom

This commit is contained in:
roytam1 2022-11-25 11:46:08 +08:00
commit de0b4ac202
15 changed files with 437 additions and 77 deletions

View file

@ -1715,16 +1715,18 @@ nsLocalFile::GetNativeTarget(nsACString& aResult)
}
int32_t size = (int32_t)symStat.st_size;
char* target = (char*)moz_xmalloc(size + 1);
if (!target) {
nsAutoCString target;
if (!target.SetLength(size, mozilla::fallible)) {
return NS_ERROR_OUT_OF_MEMORY;
}
if (readlink(mPath.get(), target, (size_t)size) < 0) {
free(target);
ssize_t written = readlink(mPath.get(), target.BeginWriting(), size_t(size));
if (written < 0) {
return NSRESULT_FOR_ERRNO();
}
target[size] = '\0';
// Target might have changed since the lstat call, or lstat might lie, see bug
// 1791029.
target.Truncate(written);
nsresult rv = NS_OK;
nsCOMPtr<nsIFile> self(this);
@ -1740,7 +1742,7 @@ nsLocalFile::GetNativeTarget(nsACString& aResult)
if (NS_FAILED(rv = self->GetParent(getter_AddRefs(parent)))) {
break;
}
if (NS_FAILED(rv = parent->AppendRelativeNativePath(nsDependentCString(target)))) {
if (NS_FAILED(rv = parent->AppendRelativeNativePath(target))) {
break;
}
if (NS_FAILED(rv = parent->GetNativePath(aResult))) {
@ -1765,26 +1767,24 @@ nsLocalFile::GetNativeTarget(nsACString& aResult)
}
int32_t newSize = (int32_t)symStat.st_size;
if (newSize > size) {
char* newTarget = (char*)moz_xrealloc(target, newSize + 1);
if (!newTarget) {
rv = NS_ERROR_OUT_OF_MEMORY;
break;
}
target = newTarget;
size = newSize;
size = newSize;
nsAutoCString newTarget;
if (!newTarget.SetLength(size, mozilla::fallible)) {
rv = NS_ERROR_OUT_OF_MEMORY;
break;
}
int32_t linkLen = readlink(flatRetval.get(), target, size);
ssize_t linkLen = readlink(flatRetval.get(), newTarget.BeginWriting(), size);
if (linkLen == -1) {
rv = NSRESULT_FOR_ERRNO();
break;
}
target[linkLen] = '\0';
// Target might have changed since the lstat call, or lstat might lie, see bug
// 1791029.
newTarget.Truncate(linkLen);
target = newTarget;
}
free(target);
if (NS_FAILED(rv)) {
aResult.Truncate();
}