Merge pull request #290 from JKamsker/patch-2

Added string escape for DemuxConcatArgument

Former-commit-id: 98493b4b6d
This commit is contained in:
Malte Rosenbjerg 2022-01-06 00:44:28 +01:00 committed by GitHub
commit 55e69f84b4
2 changed files with 18 additions and 1 deletions

View file

@ -1,6 +1,7 @@
using Microsoft.VisualStudio.TestTools.UnitTesting; using Microsoft.VisualStudio.TestTools.UnitTesting;
using FluentAssertions; using FluentAssertions;
using System.Reflection; using System.Reflection;
using FFMpegCore.Arguments;
namespace FFMpegCore.Test namespace FFMpegCore.Test
{ {
@ -86,5 +87,12 @@ FFMpegArgumentProcessor CreateArgumentProcessor() => FFMpegArguments
var options2 = processor2.GetConfiguredOptions(null); var options2 = processor2.GetConfiguredOptions(null);
options2.WorkingDirectory.Should().Be(globalWorkingDir); options2.WorkingDirectory.Should().Be(globalWorkingDir);
} }
[TestMethod]
public void Concat_Escape()
{
var arg = new DemuxConcatArgument(new[] { @"Heaven's River\05 - Investigation.m4b" });
arg.Values.Should().BeEquivalentTo(new[] { @"file 'Heaven'\''s River\05 - Investigation.m4b'" });
}
} }
} }

View file

@ -16,8 +16,17 @@ public class DemuxConcatArgument : IInputArgument
public readonly IEnumerable<string> Values; public readonly IEnumerable<string> Values;
public DemuxConcatArgument(IEnumerable<string> values) public DemuxConcatArgument(IEnumerable<string> values)
{ {
Values = values.Select(value => $"file '{value}'"); Values = values.Select(value => $"file '{Escape(value)}'");
} }
/// <summary>
/// Thanks slhck
/// https://superuser.com/a/787651/1089628
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private string Escape(string value) => value.Replace("'", @"'\''");
private readonly string _tempFileName = Path.Combine(GlobalFFOptions.Current.TemporaryFilesFolder, $"concat_{Guid.NewGuid()}.txt"); private readonly string _tempFileName = Path.Combine(GlobalFFOptions.Current.TemporaryFilesFolder, $"concat_{Guid.NewGuid()}.txt");
public void Pre() => File.WriteAllLines(_tempFileName, Values); public void Pre() => File.WriteAllLines(_tempFileName, Values);