Changeset 6646


Ignore:
Timestamp:
04/06/11 15:27:14 (4 years ago)
Author:
Saare
Message:

#7494: Regression of [6629]: Parser may go in infinite loop when it fixes malformed list structures.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/_source/core/htmlparser/fragment.js

    r6629 r6646  
    185185                }
    186186
    187                 parser.onTagOpen = function( tagName, attributes, selfClosing )
     187                parser.onTagOpen = function( tagName, attributes, selfClosing, optionalClose )
    188188                {
    189189                        var element = new CKEDITOR.htmlParser.element( tagName, attributes );
     
    194194                                element.isEmpty = true;
    195195
     196                        element.isOptionalClose = optionalClose;
     197
    196198                        // This is a tag to be removed if empty, so do not add it immediately.
    197199                        if ( CKEDITOR.dtd.$removeEmpty[ tagName ] )
     
    225227                                if ( !element.isUnknown && !currentNode.isUnknown && !currentDtd[ tagName ] )
    226228                                {
     229                                        // Current node doesn't have a close tag, time for a close
     230                                        // as this element isn't fit in. (#7497)
     231                                        if ( currentNode.isOptionalClose )
     232                                                parser.onTagClose( currentName );
    227233                                        // Fixing malformed nested lists by moving it into a previous list item. (#3828)
    228                                         if ( tagName in listBlocks
     234                                        else if ( tagName in listBlocks
    229235                                                && currentName in listBlocks )
    230236                                        {
     
    236242                                                        addElement( ( lastChild = new CKEDITOR.htmlParser.element( 'li' ) ), currentNode );
    237243
     244                                                !element.returnPoint && ( element.returnPoint = currentNode );
    238245                                                currentNode = lastChild;
    239246                                        }
    240247                                        // Establish new list root for orphan list items.
    241248                                        else if ( tagName in CKEDITOR.dtd.$listItem && currentName != tagName )
    242                                                 parser.onTagOpen( tagName == 'li' ? 'ul' : 'dl', {} );
     249                                                parser.onTagOpen( tagName == 'li' ? 'ul' : 'dl', {}, 0, 1 );
    243250                                        // We're inside a structural block like table and list, AND the incoming element
    244251                                        // is not of the same type (e.g. <td>td1<td>td2</td>), we simply add this new one before it,
     
    370377                                 && CKEDITOR.tools.trim( text ) )
    371378                        {
    372                                 this.onTagOpen( fixForBody, {} );
     379                                this.onTagOpen( fixForBody, {}, 0, 1 );
    373380                        }
    374381
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy