Minor bug fixes to Balancer.
authorC. Scott Ananian <cscott@cscott.net>
Mon, 18 Jul 2016 20:54:24 +0000 (16:54 -0400)
committerC. Scott Ananian <cscott@cscott.net>
Mon, 18 Jul 2016 21:42:04 +0000 (17:42 -0400)
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

includes/tidy/Balancer.php

index 9e96b14..4bcaf1a 100644 (file)
@@ -1613,9 +1613,11 @@ class BalanceActiveFormattingElements {
 
                // 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;
                        }
                }
@@ -1624,7 +1626,7 @@ class BalanceActiveFormattingElements {
                // 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 {
@@ -2656,7 +2658,7 @@ class Balancer {
                        case 'h5':
                        case 'h6':
                                if ( !$this->stack->inScope( BalanceSets::$headingSet ) ) {
-                                       return;
+                                       return true; # ignore
                                }
                                $this->stack->generateImpliedEndTags();
                                $this->stack->popTag( BalanceSets::$headingSet );