From 54b6374e7d59fbbc7534727a6d8fd9a431fd742d Mon Sep 17 00:00:00 2001 From: Eliot Jones Date: Mon, 15 Jan 2018 21:16:36 +0000 Subject: [PATCH] coverage for the name tokenizer reading hex --- .../Tokenization/NameTokenizerTests.cs | 36 +++++++++++++++++++ .../Tokenization/NameTokenizer.cs | 16 +++------ 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/UglyToad.PdfPig.Tests/Tokenization/NameTokenizerTests.cs b/src/UglyToad.PdfPig.Tests/Tokenization/NameTokenizerTests.cs index a048cfa9..aa3c11f4 100644 --- a/src/UglyToad.PdfPig.Tests/Tokenization/NameTokenizerTests.cs +++ b/src/UglyToad.PdfPig.Tests/Tokenization/NameTokenizerTests.cs @@ -112,6 +112,42 @@ Assert.Equal(expected, AssertNameToken(token).Data.Name); } + [Fact] + public void IgnoredInvalidHex() + { + var input = StringBytesTestConverter.Convert("/Invalid#AZBadHex"); + + var result = tokenizer.TryTokenize(input.First, input.Bytes, out var token); + + Assert.True(result); + + Assert.Equal("Invalid#AZBadHex", AssertNameToken(token).Data.Name); + } + + [Fact] + public void IgnoreInvalidSingleHex() + { + var input = StringBytesTestConverter.Convert("/Invalid#Z"); + + var result = tokenizer.TryTokenize(input.First, input.Bytes, out var token); + + Assert.True(result); + + Assert.Equal("Invalid#Z", AssertNameToken(token).Data.Name); + } + + [Fact] + public void EndsNameFollowingInvalidHex() + { + var input = StringBytesTestConverter.Convert("/Hex#/Name"); + + var result = tokenizer.TryTokenize(input.First, input.Bytes, out var token); + + Assert.True(result); + + Assert.Equal("Hex#", AssertNameToken(token).Data.Name); + } + private static NameToken AssertNameToken(IToken token) { Assert.NotNull(token); diff --git a/src/UglyToad.PdfPig/Tokenization/NameTokenizer.cs b/src/UglyToad.PdfPig/Tokenization/NameTokenizer.cs index ae85f876..5aba0928 100644 --- a/src/UglyToad.PdfPig/Tokenization/NameTokenizer.cs +++ b/src/UglyToad.PdfPig/Tokenization/NameTokenizer.cs @@ -25,7 +25,7 @@ bool escapeActive = false; int postEscapeRead = 0; var escapedChars = new char[2]; - + while (inputBytes.MoveNext()) { var b = inputBytes.CurrentByte; @@ -43,16 +43,10 @@ if (postEscapeRead == 2) { - string hex = new string(escapedChars); - try - { - var characterToWrite = (byte)Convert.ToInt32(hex, 16); - bytes.Add(characterToWrite); - } - catch (FormatException e) - { - throw new InvalidOperationException("Error: expected hex digit, actual='" + hex + "'", e); - } + var hex = new string(escapedChars); + + var characterToWrite = (byte)Convert.ToInt32(hex, 16); + bytes.Add(characterToWrite); escapeActive = false; postEscapeRead = 0;