diff --git a/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs b/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs index 8e92027cc..e53933ade 100644 --- a/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs +++ b/ReportImp/SBBMainzReports/ServiceInvoiceReport.cs @@ -5,7 +5,9 @@ using BeWo.Report.ReportObjects; using BS.Shared.Extensions; using DevExpress.XtraReports.UI; using System; +using System.IO; using System.Linq; +using System.Security.Cryptography; using System.Text; namespace SBBMainzReports @@ -31,6 +33,8 @@ namespace SBBMainzReports { lblReName.Text = lblReName.Text.Replace("/", "-"); } + //SanitizeFilename auch in BS.Shard.Core aufgenommen, brauchte es aber hier sofort + lblReName.Text = SanitizeFilename(lblReName.Text); if (start.Month == end.Month && start.Year == end.Year) { lblAbrechnungszeitraum.Text = String.Format("{0:MMMM yyyy}", start); @@ -143,5 +147,30 @@ namespace SBBMainzReports { PrintingSystem.Document.Name = String.Format("{0}", lblReName.Text); } + + private static readonly char[] InvalidFilenameChars = Path.GetInvalidFileNameChars(); + + public static bool ContainsInvalidFilenameChars(string fileName) + { + return fileName.IndexOfAny(InvalidFilenameChars) >= 0; + } + + public static string SanitizeFilename(string fileName) + { + if (String.IsNullOrEmpty(fileName) || !ContainsInvalidFilenameChars(fileName)) + { + return fileName; + } + + var sb = new StringBuilder(fileName.Length); + foreach (char c in fileName) + { + if (!InvalidFilenameChars.Contains(c)) + { + sb.Append(c); + } + } + return sb.ToString(); + } } } \ No newline at end of file diff --git a/Shared/Core/SecurityUtils.cs b/Shared/Core/SecurityUtils.cs index ccc3ede27..961b38f4c 100644 --- a/Shared/Core/SecurityUtils.cs +++ b/Shared/Core/SecurityUtils.cs @@ -17,6 +17,24 @@ namespace BS.Shared.Core return fileName.IndexOfAny(InvalidFilenameChars) >= 0; } + public static string SanitizeFilename(string fileName) + { + if (String.IsNullOrEmpty(fileName) || !ContainsInvalidFilenameChars(fileName)) + { + return fileName; + } + + var sb = new StringBuilder(fileName.Length); + foreach (char c in fileName) + { + if (!InvalidFilenameChars.Contains(c)) + { + sb.Append(c); + } + } + return sb.ToString(); + } + public static string GetChecksum(string filePath) { using (FileStream stream = File.OpenRead(filePath))