mirror of
https://github.com/UglyToad/PdfPig.git
synced 2026-03-10 00:23:29 +08:00
Merge pull request #249 from InusualZ/token-write-string
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>
|
/// </summary>
|
||||||
public class TokenWriter
|
public class TokenWriter
|
||||||
{
|
{
|
||||||
|
private static readonly byte Backslash = GetByte("\\");
|
||||||
|
|
||||||
private static readonly byte ArrayStart = GetByte("[");
|
private static readonly byte ArrayStart = GetByte("[");
|
||||||
private static readonly byte ArrayEnd = GetByte("]");
|
private static readonly byte ArrayEnd = GetByte("]");
|
||||||
|
|
||||||
@@ -374,6 +376,12 @@
|
|||||||
for (var i = 0; i < stringToken.Data.Length; i++)
|
for (var i = 0; i < stringToken.Data.Length; i++)
|
||||||
{
|
{
|
||||||
var c = stringToken.Data[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.
|
// Close enough.
|
||||||
if (c > 250)
|
if (c > 250)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user