LibWeb: Prevent OOB access in HTMLEncodingDetection for input of '</'

Previously, this never checked if `position + 2` was valid. This
slightly reorders the loop so all indices are checked.

Fixes #22163
This commit is contained in:
MacDue 2024-01-04 11:22:20 +00:00 committed by Andreas Kling
parent 3f52d6045a
commit 5e973fca0b
Notes: sideshowbarker 2024-07-16 23:38:54 +09:00
3 changed files with 17 additions and 4 deletions

View file

@ -321,12 +321,12 @@ Optional<ByteString> run_prescan_byte_stream_algorithm(DOM::Document& document,
prescan_skip_whitespace_and_slashes(input, position);
while (prescan_get_attribute(document, input, position)) { };
} else if (!prescan_should_abort(input, position + 1) && input[position] == '<' && (input[position + 1] == '!' || input[position + 1] == '/' || input[position + 1] == '?')) {
position += 2;
while (input[position] != '>') {
++position;
position += 1;
do {
position += 1;
if (prescan_should_abort(input, position))
return {};
}
} while (input[position] != '>');
} else {
// Do nothing.
}