mirror of
https://github.com/velopack/velopack.git
synced 2025-10-25 15:19:22 +00:00
extract GetFileName to separate method and handle invalid characters
This commit is contained in:
committed by
Caelan Sayler
parent
132a466c9a
commit
ad46bc07dd
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@@ -231,7 +232,7 @@ namespace Velopack
|
|||||||
var appTempDir = Locator.AppTempDir!;
|
var appTempDir = Locator.AppTempDir!;
|
||||||
var appPackageDir = Locator.PackagesDir!;
|
var appPackageDir = Locator.PackagesDir!;
|
||||||
|
|
||||||
var completeFile = Path.Combine(appPackageDir, Path.GetFileName(targetRelease.FileName));
|
var completeFile = Path.Combine(appPackageDir, GetSafeFilename(targetRelease.FileName));
|
||||||
var incompleteFile = completeFile + ".partial";
|
var incompleteFile = completeFile + ".partial";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -260,7 +261,7 @@ namespace Velopack
|
|||||||
$"Only full update will be available.");
|
$"Only full update will be available.");
|
||||||
} else {
|
} else {
|
||||||
using var _1 = Utility.GetTempDirectory(out var deltaStagingDir, appTempDir);
|
using var _1 = Utility.GetTempDirectory(out var deltaStagingDir, appTempDir);
|
||||||
string basePackagePath = Path.Combine(appPackageDir, Path.GetFileName(updates.BaseRelease.FileName));
|
string basePackagePath = Path.Combine(appPackageDir, GetSafeFilename(updates.BaseRelease.FileName));
|
||||||
if (!File.Exists(basePackagePath))
|
if (!File.Exists(basePackagePath))
|
||||||
throw new Exception($"Unable to find base package {basePackagePath} for delta update.");
|
throw new Exception($"Unable to find base package {basePackagePath} for delta update.");
|
||||||
EasyZip.ExtractZipToDirectory(Log, basePackagePath, deltaStagingDir);
|
EasyZip.ExtractZipToDirectory(Log, basePackagePath, deltaStagingDir);
|
||||||
@@ -318,6 +319,27 @@ namespace Velopack
|
|||||||
|
|
||||||
CleanPackagesExcept(completeFile);
|
CleanPackagesExcept(completeFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Ensures that the file name is safe for writing to disk without escaping the packages folder
|
||||||
|
static string GetSafeFilename(string fileName)
|
||||||
|
{
|
||||||
|
string safeFileName = Path.GetFileName(fileName);
|
||||||
|
char[] invalidFileNameChars = Path.GetInvalidFileNameChars();
|
||||||
|
|
||||||
|
if (safeFileName.IndexOfAny(invalidFileNameChars) != -1 ) {
|
||||||
|
StringBuilder safeName = new();
|
||||||
|
foreach(char ch in safeFileName) {
|
||||||
|
if (Array.IndexOf(invalidFileNameChars, ch) == -1)
|
||||||
|
safeName.Append(ch);
|
||||||
|
else
|
||||||
|
safeName.Append('_');
|
||||||
|
}
|
||||||
|
safeFileName = safeName.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return safeFileName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user