mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2024-12-27 08:42:48 +01:00
Bugfix: Invalid parsing of postscript function
This commit is contained in:
parent
8bd2ca6386
commit
5b8b1de2db
@ -1663,6 +1663,7 @@ PDFPostScriptFunction::Program PDFPostScriptFunction::parseProgram(const QByteAr
|
||||
|
||||
Program result;
|
||||
PDFLexicalAnalyzer parser(adjustedArray.constBegin(), adjustedArray.constEnd());
|
||||
parser.setTokenizingPostScriptFunction();
|
||||
|
||||
std::stack<InstructionPointer> blockCallStack;
|
||||
while (true)
|
||||
|
@ -32,7 +32,8 @@ namespace pdf
|
||||
PDFLexicalAnalyzer::PDFLexicalAnalyzer(const char* begin, const char* end) :
|
||||
m_begin(begin),
|
||||
m_current(begin),
|
||||
m_end(end)
|
||||
m_end(end),
|
||||
m_tokenizingPostScriptFunction(false)
|
||||
{
|
||||
|
||||
}
|
||||
@ -454,6 +455,16 @@ PDFLexicalAnalyzer::Token PDFLexicalAnalyzer::fetch()
|
||||
return Token(TokenType::Command, std::move(command));
|
||||
}
|
||||
}
|
||||
else if (m_tokenizingPostScriptFunction)
|
||||
{
|
||||
const char currentChar = lookChar();
|
||||
if (currentChar == CHAR_LEFT_CURLY_BRACKET || currentChar == CHAR_RIGHT_CURLY_BRACKET)
|
||||
{
|
||||
return Token(TokenType::Command, QByteArray(1, fetchChar()));
|
||||
}
|
||||
|
||||
error(tr("Unexpected character '%1' in the stream.").arg(currentChar));
|
||||
}
|
||||
else
|
||||
{
|
||||
error(tr("Unexpected character '%1' in the stream.").arg(lookChar()));
|
||||
|
@ -153,6 +153,9 @@ public:
|
||||
/// \param position Position, from which the search is started
|
||||
PDFInteger findSubstring(const char* str, PDFInteger position) const;
|
||||
|
||||
/// Switch parser mode for tokenizing PostScript function
|
||||
void setTokenizingPostScriptFunction() { m_tokenizingPostScriptFunction = true; }
|
||||
|
||||
/// Returns true, if character is a whitespace character according to the PDF 1.7 specification
|
||||
/// \param character Character to be tested
|
||||
static constexpr bool isWhitespace(char character);
|
||||
@ -198,6 +201,7 @@ private:
|
||||
const char* m_begin;
|
||||
const char* m_current;
|
||||
const char* m_end;
|
||||
bool m_tokenizingPostScriptFunction;
|
||||
};
|
||||
|
||||
/// Parsing context. Used for example to detect cyclic reference errors.
|
||||
|
Loading…
Reference in New Issue
Block a user