Skip to content

Commit c0f3f16

Browse files
nicoawesomekling
authored andcommitted
LibPDF: Make string literal parsing fallible
...and make running out of data after a \ an error instead of silently returning an empty string.
1 parent 4318bcf commit c0f3f16

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

Userland/Libraries/LibPDF/Parser.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -241,18 +241,18 @@ PDFErrorOr<NonnullRefPtr<NameObject>> Parser::parse_name()
241241
return make_object<NameObject>(builder.to_deprecated_string());
242242
}
243243

244-
NonnullRefPtr<StringObject> Parser::parse_string()
244+
PDFErrorOr<NonnullRefPtr<StringObject>> Parser::parse_string()
245245
{
246246
ScopeGuard guard([&] { m_reader.consume_whitespace(); });
247247

248248
DeprecatedString string;
249249
bool is_binary_string;
250250

251251
if (m_reader.matches('(')) {
252-
string = parse_literal_string();
252+
string = TRY(parse_literal_string());
253253
is_binary_string = false;
254254
} else {
255-
string = parse_hex_string();
255+
string = TRY(parse_hex_string());
256256
is_binary_string = true;
257257
}
258258

@@ -275,7 +275,7 @@ NonnullRefPtr<StringObject> Parser::parse_string()
275275
return string_object;
276276
}
277277

278-
DeprecatedString Parser::parse_literal_string()
278+
PDFErrorOr<DeprecatedString> Parser::parse_literal_string()
279279
{
280280
VERIFY(m_reader.consume('('));
281281
StringBuilder builder;
@@ -299,7 +299,7 @@ DeprecatedString Parser::parse_literal_string()
299299
}
300300

301301
if (m_reader.done())
302-
return {};
302+
return error("out of data in string literal after \\");
303303

304304
auto ch = m_reader.consume();
305305
switch (ch) {
@@ -353,7 +353,7 @@ DeprecatedString Parser::parse_literal_string()
353353
return builder.to_deprecated_string();
354354
}
355355

356-
DeprecatedString Parser::parse_hex_string()
356+
PDFErrorOr<DeprecatedString> Parser::parse_hex_string()
357357
{
358358
VERIFY(m_reader.consume('<'));
359359

Userland/Libraries/LibPDF/Parser.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ class Parser {
4949
PDFErrorOr<NonnullRefPtr<IndirectValue>> parse_indirect_value();
5050
PDFErrorOr<Value> parse_number();
5151
PDFErrorOr<NonnullRefPtr<NameObject>> parse_name();
52-
NonnullRefPtr<StringObject> parse_string();
53-
DeprecatedString parse_literal_string();
54-
DeprecatedString parse_hex_string();
52+
PDFErrorOr<NonnullRefPtr<StringObject>> parse_string();
53+
PDFErrorOr<DeprecatedString> parse_literal_string();
54+
PDFErrorOr<DeprecatedString> parse_hex_string();
5555
PDFErrorOr<NonnullRefPtr<ArrayObject>> parse_array();
5656
PDFErrorOr<NonnullRefPtr<DictObject>> parse_dict();
5757
PDFErrorOr<NonnullRefPtr<StreamObject>> parse_stream(NonnullRefPtr<DictObject> dict);

0 commit comments

Comments
 (0)