LibWeb: Make HTTP response directive parsing more robust

This commit is contained in:
Andreas Kling 2024-06-22 18:28:40 +02:00 committed by Andreas Kling
parent 3b40667413
commit 47169db452
Notes: sideshowbarker 2024-07-17 04:32:07 +09:00

View file

@ -278,9 +278,18 @@ u64 Response::freshness_lifetime() const
// If the max-age response directive (Section 5.2.2.1) is present, use its value, or
for (auto const& directive : *elem) {
if (directive.starts_with_bytes("max-age"sv)) {
auto equal_offset = directive.find_byte_offset('=').value();
auto const value = directive.bytes_as_string_view().substring_view(equal_offset);
return value.to_number<u64>().value();
auto equal_offset = directive.find_byte_offset('=');
if (!equal_offset.has_value()) {
dbgln("Bogus directive: '{}'", directive);
continue;
}
auto const value_string = directive.bytes_as_string_view().substring_view(equal_offset.value() + 1);
auto maybe_value = value_string.to_number<u64>();
if (!maybe_value.has_value()) {
dbgln("Bogus directive: '{}'", directive);
continue;
}
return maybe_value.value();
}
}
@ -299,9 +308,18 @@ u64 Response::stale_while_revalidate_lifetime() const
for (auto const& directive : *elem) {
if (directive.starts_with_bytes("stale-while-revalidate"sv)) {
auto equal_offset = directive.find_byte_offset('=').value();
auto const value = directive.bytes_as_string_view().substring_view(equal_offset);
return value.to_number<u64>().value();
auto equal_offset = directive.find_byte_offset('=');
if (!equal_offset.has_value()) {
dbgln("Bogus directive: '{}'", directive);
continue;
}
auto const value_string = directive.bytes_as_string_view().substring_view(equal_offset.value() + 1);
auto maybe_value = value_string.to_number<u64>();
if (!maybe_value.has_value()) {
dbgln("Bogus directive: '{}'", directive);
continue;
}
return maybe_value.value();
}
}