Skip to content

Commit f2c3399

Browse files
committed
Update tree error reporting
1 parent fa71d77 commit f2c3399

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

ext/dom/html_document.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ typedef struct {
4545
size_t current_input_length;
4646
size_t current_total_offset;
4747
dom_line_column_cache cache_tokenizer;
48+
bool html_no_implied;
4849
} dom_lexbor_libxml2_bridge_application_data;
4950

5051
typedef struct {
@@ -252,6 +253,12 @@ static void dom_lexbor_libxml2_bridge_tokenizer_error_reporter(void *application
252253
static void dom_lexbor_libxml2_bridge_tree_error_reporter(void *application_data_voidptr, lxb_html_tree_error_t *error, size_t line, size_t column, size_t len)
253254
{
254255
dom_lexbor_libxml2_bridge_application_data *application_data = application_data_voidptr;
256+
257+
if (line == 1 && application_data->html_no_implied && error->id == LXB_HTML_RULES_ERROR_UNTOININMO) {
258+
/* For no implied mode, we want to mimick libxml's behaviour of not reporting an error for a lacking doctype. */
259+
return;
260+
}
261+
255262
if (UNEXPECTED(len <= 1)) {
256263
/* Possible with EOF, or single-character tokens, don't use a range in the error display in this case */
257264
php_libxml_pretend_ctx_error_ex(line, column, "tree error %s in %s, line: %zu, column: %zu\n", dom_lexbor_tree_error_code_to_string(error->id), application_data->input_name, line, column);
@@ -549,6 +556,7 @@ PHP_METHOD(DOM_HTMLDocument, createFromString)
549556
dom_lexbor_libxml2_bridge_application_data application_data;
550557
application_data.input_name = "Entity";
551558
application_data.current_total_offset = 0;
559+
application_data.html_no_implied = options & HTML_PARSE_NOIMPLIED;
552560
dom_reset_line_column_cache(&application_data.cache_tokenizer);
553561
lexbor_libxml2_bridge_parse_context ctx;
554562
lexbor_libxml2_bridge_parse_context_init(&ctx);
@@ -660,6 +668,7 @@ PHP_METHOD(DOM_HTMLDocument, createFromFile)
660668
dom_lexbor_libxml2_bridge_application_data application_data;
661669
application_data.input_name = filename;
662670
application_data.current_total_offset = 0;
671+
application_data.html_no_implied = options & HTML_PARSE_NOIMPLIED;
663672
dom_reset_line_column_cache(&application_data.cache_tokenizer);
664673
lexbor_libxml2_bridge_parse_context ctx;
665674
lexbor_libxml2_bridge_parse_context_init(&ctx);

0 commit comments

Comments
 (0)