mirror of
https://github.com/UglyToad/PdfPig.git
synced 2026-03-10 00:23:29 +08:00
Fix TokenWriter::WriteString not escaping properly special characters
This commit is contained in:
30
src/UglyToad.PdfPig.Tests/Writer/TokenWriterTests.cs
Normal file
30
src/UglyToad.PdfPig.Tests/Writer/TokenWriterTests.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
namespace UglyToad.PdfPig.Tests.Writer
|
||||
{
|
||||
using Integration;
|
||||
using PdfPig.Writer;
|
||||
using System.IO;
|
||||
using UglyToad.PdfPig.Tokens;
|
||||
using Xunit;
|
||||
|
||||
public class TokenWriterTests
|
||||
{
|
||||
|
||||
[Fact]
|
||||
public void EscapeSpecialCharacter()
|
||||
{
|
||||
using (var memStream = new MemoryStream())
|
||||
{
|
||||
TokenWriter.WriteToken(new StringToken("\\"), memStream);
|
||||
TokenWriter.WriteToken(new StringToken("(Hello)"), memStream);
|
||||
|
||||
// Read Test
|
||||
memStream.Position = 0;
|
||||
using (var streamReader = new StreamReader(memStream))
|
||||
{
|
||||
var line = streamReader.ReadToEnd();
|
||||
Assert.Equal("(\\\\) (\\(Hello\\)) ", line);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,8 @@
|
||||
/// </summary>
|
||||
public class TokenWriter
|
||||
{
|
||||
private static readonly byte Backslash = GetByte("\\");
|
||||
|
||||
private static readonly byte ArrayStart = GetByte("[");
|
||||
private static readonly byte ArrayEnd = GetByte("]");
|
||||
|
||||
@@ -374,6 +376,12 @@
|
||||
for (var i = 0; i < stringToken.Data.Length; i++)
|
||||
{
|
||||
var c = stringToken.Data[i];
|
||||
|
||||
if (c == (char) StringStart || c == (char)StringEnd || c == (char) Backslash)
|
||||
{
|
||||
stringToken = new StringToken(stringToken.Data.Insert(i++, "\\"), stringToken.EncodedWith);
|
||||
}
|
||||
|
||||
// Close enough.
|
||||
if (c > 250)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user