mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 03:47:34 +00:00
LibPDF: Disallow parsing indirect values as operands
An operation like 0 0 0 RG would have been confused for [ 0, 0 0 R ] G
This commit is contained in:
parent
04cb00dc9a
commit
65e83bed53
2 changed files with 17 additions and 5 deletions
|
@ -53,7 +53,7 @@ String Parser::parse_comment()
|
|||
return str;
|
||||
}
|
||||
|
||||
PDFErrorOr<Value> Parser::parse_value()
|
||||
PDFErrorOr<Value> Parser::parse_value(CanBeIndirectValue can_be_indirect_value)
|
||||
{
|
||||
parse_comment();
|
||||
|
||||
|
@ -75,8 +75,12 @@ PDFErrorOr<Value> Parser::parse_value()
|
|||
return Value(false);
|
||||
}
|
||||
|
||||
if (m_reader.matches_number())
|
||||
return parse_possible_indirect_value_or_ref();
|
||||
if (m_reader.matches_number()) {
|
||||
if (can_be_indirect_value == CanBeIndirectValue::Yes)
|
||||
return parse_possible_indirect_value_or_ref();
|
||||
else
|
||||
return parse_number();
|
||||
}
|
||||
|
||||
if (m_reader.matches('/'))
|
||||
return MUST(parse_name());
|
||||
|
@ -513,7 +517,10 @@ PDFErrorOr<Vector<Operator>> Parser::parse_operators()
|
|||
continue;
|
||||
}
|
||||
|
||||
operator_args.append(TRY(parse_value()));
|
||||
// Note: We disallow parsing indirect values here, since
|
||||
// operations like 0 0 0 RG would confuse the parser
|
||||
auto v = TRY(parse_value(CanBeIndirectValue::No));
|
||||
operator_args.append(v);
|
||||
}
|
||||
|
||||
return operators;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue