From 2aa633cc3ff517e91d42c58d5afc43d480fdbd43 Mon Sep 17 00:00:00 2001 From: Matthew Laukala Date: Fri, 10 Nov 2017 10:01:44 -0800 Subject: [PATCH] All unexpected chars in an array or dictionary are now sting entries. --- src/PdfSharp/Pdf.IO/Parser.cs | 39 +++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/src/PdfSharp/Pdf.IO/Parser.cs b/src/PdfSharp/Pdf.IO/Parser.cs index a5d12ac3..4814450a 100644 --- a/src/PdfSharp/Pdf.IO/Parser.cs +++ b/src/PdfSharp/Pdf.IO/Parser.cs @@ -537,10 +537,41 @@ private void ParseObject(Symbol stop) //case Symbol.StartXRef: //case Symbol.Eof: default: - ParserDiagnostics.HandleUnexpectedToken(_lexer.Token); - SkipCharsUntil(stop); - return; - } + // Any Keyword can be treated as a literal string. + switch (stop) + { + case Symbol.EndArray: + // Arrays are space delimited. + while (true) + { + char ch = _lexer.AppendAndScanNextChar(); + if (Lexer.IsWhiteSpace(ch) || ch == Chars.EOF || ch == Chars.BracketRight) + { + _stack.Shift(new PdfString(_lexer.Token, PdfStringFlags.RawEncoding)); + break; + } + } + break; + case Symbol.EndDictionary: + // Dictionaries are key value pairs where key must be a name. + while (true) + { + char ch = _lexer.AppendAndScanNextChar(); + if (ch == Chars.Slash || ch == Chars.Greater) + { + _stack.Shift(new PdfString(_lexer.Token, PdfStringFlags.RawEncoding)); + break; + } + } + break; + default: + ParserDiagnostics.HandleUnexpectedToken(_lexer.Token); + SkipCharsUntil(stop); + break; + } + + return; + } } ParserDiagnostics.ThrowParserException("Unexpected end of file."); }