Prevented bad duplicate IDs causing major exception

Related to #1393
This commit is contained in:
Dan Brown 2019-04-15 21:20:32 +01:00
parent 95d4149d5e
commit c380c10d54
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
2 changed files with 18 additions and 0 deletions

View File

@ -715,6 +715,7 @@ class EntityRepo
}
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML(mb_convert_encoding('<body>'.$matchedPage->html.'</body>', 'HTML-ENTITIES', 'UTF-8'));
$matchingElem = $doc->getElementById($splitInclude[1]);
if ($matchingElem === null) {
@ -730,6 +731,7 @@ class EntityRepo
$innerContent .= $doc->saveHTML($childNode);
}
}
libxml_clear_errors();
$html = str_replace($matches[0][$index], trim($innerContent), $html);
}

View File

@ -143,4 +143,20 @@ class PageContentTest extends TestCase
$pageView->assertDontSee(htmlentities($script));
}
public function test_duplicate_ids_does_not_break_page_render()
{
$this->asEditor();
$pageA = Page::first();
$pageB = Page::query()->where('id', '!=', $pageA->id)->first();
$content = '<ul id="bkmrk-xxx-%28"></ul> <ul id="bkmrk-xxx-%28"></ul>';
$pageA->html = $content;
$pageA->save();
$pageB->html = '<ul id="bkmrk-xxx-%28"></ul> <p>{{@'. $pageA->id .'#test}}</p>';
$pageB->save();
$pageView = $this->get($pageB->getUrl());
$pageView->assertSuccessful();
}
}