Skip to content

Commit 8d059b9

Browse files
committed
HTML API: Fix an infinite loop in certain unclosed SCRIPT tags.
When the Tag Processor (or HTML Processor) attempts to parse certain incomplete script tags, the parser enters an infinite loop and will hang indefinitely. The conditions to reach this situation are: - Input HTML ends with an open script tag. - The final character of input is `-` or `<`. The infinite loop was caused by the parser-advancing increment not being called when two `||` OR conditions short-circuited. If the first condition was true, the `$at++` code was never reached. This path resolves the issue. Developed in WordPress/wordpress-develop#7128 Discussed in https://core.trac.wordpress.org/ticket/61810 Follow-up to [55203]. Props: dmsnell, jonsurrell. Fixes #61810. Built from https://develop.svn.wordpress.org/trunk@58845 git-svn-id: http://core.svn.wordpress.org/trunk@58241 1a063a9b-81f0-0310-95a4-ce76da25c4cd
1 parent 7a86a5a commit 8d059b9

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

wp-includes/html-api/class-wp-html-tag-processor.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,8 +1431,15 @@ private function skip_script_data(): bool {
14311431
continue;
14321432
}
14331433

1434-
// Everything of interest past here starts with "<".
1435-
if ( $at + 1 >= $doc_length || '<' !== $html[ $at++ ] ) {
1434+
if ( $at + 1 >= $doc_length ) {
1435+
return false;
1436+
}
1437+
1438+
/*
1439+
* Everything of interest past here starts with "<".
1440+
* Check this character and advance position regardless.
1441+
*/
1442+
if ( '<' !== $html[ $at++ ] ) {
14361443
continue;
14371444
}
14381445

wp-includes/version.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*
1717
* @global string $wp_version
1818
*/
19-
$wp_version = '6.7-alpha-58844';
19+
$wp_version = '6.7-alpha-58845';
2020

2121
/**
2222
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.

0 commit comments

Comments
 (0)