This is a follow-up to the refactor done in
5726c9ceb0644af360d37b86351b97ddfcbee20c which prevents a crash when
the first entry in the stack happens to be a BalanceMarker (and thus
doesn't have a `$localName` property). It also fixes an unrelated
issue where unpaired close-heading tags (like `</h3>`) get entity-escaped
instead of ignored.
Test cases exposing these bugs are added in
Ie854cf99f7e72bcca1bb8565ace558a43dcb6379.
Change-Id: Ia9a1d435be1be10512071f5ff626b68742863483
// Loop backward through the list until we find a marker or an
// open element
+ $foundit = false;
while ( $entry->prevAFE ) {
$entry = $entry->prevAFE;
if ( $entry instanceof BalanceMarker || $stack->indexOf( $entry ) >= 0 ) {
+ $foundit = true;
break;
}
}
// the first element if we didn't find a marker or open element),
// recreating formatting elements and pushing them back onto the list
// of open elements.
- if ( $entry->prevAFE ) {
+ if ( $foundit ) {
$entry = $entry->nextAFE;
}
do {
case 'h5':
case 'h6':
if ( !$this->stack->inScope( BalanceSets::$headingSet ) ) {
- return;
+ return true; # ignore
}
$this->stack->generateImpliedEndTags();
$this->stack->popTag( BalanceSets::$headingSet );