Changeset 3779


Ignore:
Timestamp:
06/26/09 13:40:41 (5 years ago)
Author:
garry.yao
Message:

Fixing #3591: Protecting flash related elements including <object>,<embed>,<param>.

Location:
CKEditor/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/CHANGES.html

    r3778 r3779  
    1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
     1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    22<!-- 
    33Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 
     
    6565                <li><a href="http://dev.fckeditor.net/ticket/3789">#3789</a> : The &quot;src&quot; attribute  
    6666                        was getting duplicated in some situations.</li> 
     67                <li><a href="http://dev.fckeditor.net/ticket/3591">#3591</a> : Protecting flash related elements 
     68                        including '&lt;object&gt;', '&lt;embed&gt;' and '&lt;param&gt;'. 
     69                        </li> 
    6770        </ul> 
    6871        <h3> 
  • CKEditor/trunk/_source/plugins/flash/plugin.js

    r3716 r3779  
    2020                var attributes = element.attributes; 
    2121 
    22                 return ( attributes.type != 'application/x-shockwave-flash' || !flashFilenameRegex.test( attributes.src || '' ) ); 
     22                return ( attributes.type == 'application/x-shockwave-flash' || flashFilenameRegex.test( attributes.src || '' ) ); 
    2323        } 
    2424 
  • CKEditor/trunk/_source/plugins/htmldataprocessor/plugin.js

    r3778 r3779  
    1 /* 
     1/* 
    22Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 
    33For licensing, see LICENSE.html or http://ckeditor.com/license 
     
    7373        var defaultDataFilterRules = 
    7474        { 
    75                 elementNames : 
    76                 [ 
    77                         // Elements that cause problems in wysiwyg mode. 
    78                         [ ( /^(object|embed|param)$/ ), 'cke:$1' ] 
    79                 ], 
    80  
    8175                attributeNames : 
    8276                [ 
     
    140134                                        if ( parent && parent.name == 'object' ) 
    141135                                        { 
    142                                                 element.attributes.width = parent.attributes.width; 
    143                                                 element.attributes.height = parent.attributes.height; 
     136                                                var parentWidth = parent.attributes.width, 
     137                                                        parentHeight = parent.attributes.height; 
     138                                                parentWidth && ( element.attributes.width = parentWidth ); 
     139                                                parentHeight && ( element.attributes.height = parentHeight ); 
    144140                                        } 
     141                                }, 
     142                                // Restore param elements into self-closing. 
     143                                param : function( param ) 
     144                                { 
     145                                        param.children = []; 
     146                                        param.isEmpty = true; 
     147                                        return param; 
    145148                                } 
    146149                        }, 
     
    188191        var protectStyleTagsRegex = /<(style)(?=[ >])[^>]*>[^<]*<\/\1>/gi; 
    189192        var encodedTagsRegex = /<cke:encoded>([^<]*)<\/cke:encoded>/gi; 
     193        var protectElementNamesRegex = /(<\/?)((?:object|embed|param).*?>)/gi; 
     194        var protectSelfClosingRegex = /<cke:param(.*?)\/>/gi; 
    190195 
    191196        function protectStyleTagsMatch( match ) 
     
    197202        { 
    198203                return html.replace( protectStyleTagsRegex, protectStyleTagsMatch ); 
     204        } 
     205        function protectElementsNames( html ) 
     206        { 
     207                return html.replace( protectElementNamesRegex, '$1cke:$2'); 
     208        } 
     209        function protectSelfClosingElements( html ) 
     210        { 
     211                return html.replace( protectSelfClosingRegex, '<cke:param$1></cke:param>' ); 
    199212        } 
    200213 
     
    281294                                data = protectStyleTags( data ); 
    282295 
     296                        // Certain elements has problem to go through DOM operation, protect 
     297                        // them by prefixing 'cke' namespace.(#3591) 
     298                        data = protectElementsNames( data ); 
     299 
     300                        // All none-IE browsers ignore self-closed custom elements, 
     301                        // protecting them into open-close.(#3591) 
     302                        data = protectSelfClosingElements( data ); 
     303 
    283304                        // Call the browser to help us fixing a possibly invalid HTML 
    284305                        // structure. 
  • CKEditor/trunk/_source/tests/plugins/htmldataprocessor/htmldataprocessor.html

    r3735 r3779  
    242242                        assert.areSame( html , dataProcessor.toDataFormat( protectedHtml ) ); 
    243243                }, 
     244 
     245                test_ticket_3591 : function() 
     246                { 
     247                        var editor = CKEDITOR.instances.editor1, 
     248                                dataProcessor = editor.dataProcessor; 
     249 
     250                        dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter(); 
     251                        var html = getTextAreaValue( '_TEXTAREA_3591' ); 
     252                        var protectedHtml = dataProcessor.toHtml( html ); 
     253 
     254                        assert.areSame( getTextAreaValue( '_TEXTAREA_3591_protected' ), 
     255                                protectedHtml ); 
     256                        assert.areSame( getTextAreaValue( '_TEXTAREA_3591' ), 
     257                                dataProcessor.toDataFormat( protectedHtml ) ); 
     258                }, 
     259 
     260                test_ticket_3591_2 : function() 
     261                { 
     262                        var editor = CKEDITOR.instances.editor1, 
     263                                dataProcessor = editor.dataProcessor; 
     264 
     265                        dataProcessor.writer = new CKEDITOR.htmlParser.basicWriter(); 
     266                        var html = getTextAreaValue( '_TEXTAREA_3591_2' ); 
     267                        var protectedHtml = dataProcessor.toHtml( html ); 
     268 
     269                        assert.areSame( getTextAreaValue( '_TEXTAREA_3591_2' ), 
     270                                dataProcessor.toDataFormat( protectedHtml ) ); 
     271                }, 
     272 
    244273 
    245274                name : document.title 
     
    259288<![endif]--><td><%Response.Write(now())%></td><td><asp:control_name id="some_id" runat="server"/></td><td><?php 
    260289include ("head.html"); ?></td></tr></tbody></table><noscript>Your browser doesn't support JavaScript</noscript></textarea> 
     290        <textarea id="_TEXTAREA_3591"><object><param /><param /><embed></embed></object></textarea> 
     291        <textarea id="_TEXTAREA_3591_protected"><cke:object><cke:param></cke:param><cke:param></cke:param><cke:embed></cke:embed></cke:object></textarea> 
     292        <textarea id="_TEXTAREA_3591_2"><object classid="clsid"><param name="movie" value="movie.swf" /><embed src="movie.swf" type="application/x-shockwave-flash"></embed></object></textarea> 
    261293</body> 
    262294</html> 
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy