mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:37:45 +00:00
LibPDF: Make string literal parsing fallible
...and make running out of data after a \ an error instead of silently returning an empty string.
This commit is contained in:
parent
4318bcf447
commit
c0f3f1674c
2 changed files with 9 additions and 9 deletions
|
@ -241,7 +241,7 @@ PDFErrorOr<NonnullRefPtr<NameObject>> Parser::parse_name()
|
||||||
return make_object<NameObject>(builder.to_deprecated_string());
|
return make_object<NameObject>(builder.to_deprecated_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
NonnullRefPtr<StringObject> Parser::parse_string()
|
PDFErrorOr<NonnullRefPtr<StringObject>> Parser::parse_string()
|
||||||
{
|
{
|
||||||
ScopeGuard guard([&] { m_reader.consume_whitespace(); });
|
ScopeGuard guard([&] { m_reader.consume_whitespace(); });
|
||||||
|
|
||||||
|
@ -249,10 +249,10 @@ NonnullRefPtr<StringObject> Parser::parse_string()
|
||||||
bool is_binary_string;
|
bool is_binary_string;
|
||||||
|
|
||||||
if (m_reader.matches('(')) {
|
if (m_reader.matches('(')) {
|
||||||
string = parse_literal_string();
|
string = TRY(parse_literal_string());
|
||||||
is_binary_string = false;
|
is_binary_string = false;
|
||||||
} else {
|
} else {
|
||||||
string = parse_hex_string();
|
string = TRY(parse_hex_string());
|
||||||
is_binary_string = true;
|
is_binary_string = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -275,7 +275,7 @@ NonnullRefPtr<StringObject> Parser::parse_string()
|
||||||
return string_object;
|
return string_object;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeprecatedString Parser::parse_literal_string()
|
PDFErrorOr<DeprecatedString> Parser::parse_literal_string()
|
||||||
{
|
{
|
||||||
VERIFY(m_reader.consume('('));
|
VERIFY(m_reader.consume('('));
|
||||||
StringBuilder builder;
|
StringBuilder builder;
|
||||||
|
@ -299,7 +299,7 @@ DeprecatedString Parser::parse_literal_string()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_reader.done())
|
if (m_reader.done())
|
||||||
return {};
|
return error("out of data in string literal after \\");
|
||||||
|
|
||||||
auto ch = m_reader.consume();
|
auto ch = m_reader.consume();
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
|
@ -353,7 +353,7 @@ DeprecatedString Parser::parse_literal_string()
|
||||||
return builder.to_deprecated_string();
|
return builder.to_deprecated_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
DeprecatedString Parser::parse_hex_string()
|
PDFErrorOr<DeprecatedString> Parser::parse_hex_string()
|
||||||
{
|
{
|
||||||
VERIFY(m_reader.consume('<'));
|
VERIFY(m_reader.consume('<'));
|
||||||
|
|
||||||
|
|
|
@ -49,9 +49,9 @@ public:
|
||||||
PDFErrorOr<NonnullRefPtr<IndirectValue>> parse_indirect_value();
|
PDFErrorOr<NonnullRefPtr<IndirectValue>> parse_indirect_value();
|
||||||
PDFErrorOr<Value> parse_number();
|
PDFErrorOr<Value> parse_number();
|
||||||
PDFErrorOr<NonnullRefPtr<NameObject>> parse_name();
|
PDFErrorOr<NonnullRefPtr<NameObject>> parse_name();
|
||||||
NonnullRefPtr<StringObject> parse_string();
|
PDFErrorOr<NonnullRefPtr<StringObject>> parse_string();
|
||||||
DeprecatedString parse_literal_string();
|
PDFErrorOr<DeprecatedString> parse_literal_string();
|
||||||
DeprecatedString parse_hex_string();
|
PDFErrorOr<DeprecatedString> parse_hex_string();
|
||||||
PDFErrorOr<NonnullRefPtr<ArrayObject>> parse_array();
|
PDFErrorOr<NonnullRefPtr<ArrayObject>> parse_array();
|
||||||
PDFErrorOr<NonnullRefPtr<DictObject>> parse_dict();
|
PDFErrorOr<NonnullRefPtr<DictObject>> parse_dict();
|
||||||
PDFErrorOr<NonnullRefPtr<StreamObject>> parse_stream(NonnullRefPtr<DictObject> dict);
|
PDFErrorOr<NonnullRefPtr<StreamObject>> parse_stream(NonnullRefPtr<DictObject> dict);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue