You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ba...@apache.org on 2010/07/23 11:37:47 UTC

svn commit: r967014 - /myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlResponseWriterImpl.java

Author: baranda
Date: Fri Jul 23 09:37:47 2010
New Revision: 967014

URL: http://svn.apache.org/viewvc?rev=967014&view=rev
Log:
MYFACES-2836 - HtmlResponseWriterImpl does not check if a CDATA section is already opened when writing the content of a script

Modified:
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlResponseWriterImpl.java

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlResponseWriterImpl.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlResponseWriterImpl.java?rev=967014&r1=967013&r2=967014&view=diff
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlResponseWriterImpl.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/renderkit/html/HtmlResponseWriterImpl.java Fri Jul 23 09:37:47 2010
@@ -94,6 +94,8 @@ public class HtmlResponseWriterImpl
     private UIComponent _startElementUIComponent;
     private boolean _startTagOpen;
 
+    private boolean _cdataOpen;
+
     private static final Set<String> s_emptyHtmlElements = new HashSet<String>();
 
     private static final String CDATA_START = "<![CDATA[ \n";
@@ -246,6 +248,22 @@ public class HtmlResponseWriterImpl
         }
     }
 
+    @Override
+    public void startCDATA() throws IOException {
+        if (!_cdataOpen) {
+            write(CDATA_START);
+            _cdataOpen = true;
+        }
+    }
+
+    @Override
+    public void endCDATA() throws IOException {
+        if (_cdataOpen) {
+            write(CDATA_END);
+            _cdataOpen = false;
+        }
+    }
+
     private void closeStartTagIfNecessary() throws IOException
     {
         if (_startTagOpen)
@@ -371,6 +389,8 @@ public class HtmlResponseWriterImpl
 
         resetStartedElement();
     }
+
+
     
     private void writeStyleContent() throws IOException
     {
@@ -432,9 +452,26 @@ public class HtmlResponseWriterImpl
             {
                 // In xhtml use xml comment to wrap is invalid, so it is only required to remove the <!--
                 // the ending //--> will be parsed as a comment, so it will not be a problem. Let it on the content.
-                _outputWriter.write(CDATA_COMMENT_START);
+                if (_cdataOpen)
+                {
+                    _outputWriter.write("//\n");
+                }
+                else
+                {
+                   _outputWriter.write(CDATA_COMMENT_START);
+                }
+
                 _outputWriter.write(trimmedContent.substring(4));
-                _outputWriter.write(CDATA_COMMENT_END);
+
+                if (_cdataOpen)
+                {
+                    _outputWriter.write("\n");
+                }
+                else
+                {
+                    _outputWriter.write(CDATA_COMMENT_END);
+                }
+                
                 return;
             }
             else if (CommentUtils.isStartMatchWithCommentedCDATA(trimmedContent) && CommentUtils.isEndMatchWithCommentedCDATA(trimmedContent))
@@ -451,9 +488,26 @@ public class HtmlResponseWriterImpl
             {
                 // <script> in xhtml has as content type PCDATA, but in html it is CDATA,
                 // so we need to wrap here to prevent problems.
-                _outputWriter.write(CDATA_COMMENT_START);
+                if (_cdataOpen)
+                {
+                    _outputWriter.write("//\n");
+                }
+                else
+                {
+                   _outputWriter.write(CDATA_COMMENT_START);
+                }
+
                 _outputWriter.write(content);
-                _outputWriter.write(CDATA_COMMENT_END);
+
+                if (_cdataOpen)
+                {
+                    _outputWriter.write("\n");
+                }
+                else
+                {
+                    _outputWriter.write(CDATA_COMMENT_END);
+                }
+
                 return;
             }
         }