You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by vv...@apache.org on 2010/12/21 13:57:18 UTC

svn commit: r1051482 - /felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java

Author: vvalchev
Date: Tue Dec 21 12:57:18 2010
New Revision: 1051482

URL: http://svn.apache.org/viewvc?rev=1051482&view=rev
Log:
Fixed FELIX-2713 /Problem in HtmlConfigurationWriter/
https://issues.apache.org/jira/browse/FELIX-2713

Modified:
    felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java

Modified: felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java
URL: http://svn.apache.org/viewvc/felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java?rev=1051482&r1=1051481&r2=1051482&view=diff
==============================================================================
--- felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java (original)
+++ felix/trunk/webconsole/src/main/java/org/apache/felix/webconsole/internal/misc/ConfigurationRender.java Tue Dec 21 12:57:18 2010
@@ -512,92 +512,48 @@ public class ConfigurationRender extends
         {
             if ( doFilter )
             {
-                oldch = '_';
                 this.write('\n'); // write <br/>
             }
             else
             {
                 super.println();
             }
-            oldch = '\n';
         }
 
-        private int oldch = '_';
+        // some VM implementation directly write in underlying stream, instead of
+        // delegation to the write() method. So we need to override this, to make
+        // sure, that everything is escaped correctly
+        public void print(String str)
+        {
+            final char[] chars = str.toCharArray();
+            write(chars, 0, chars.length);
+        }
+
+        
+        private final char[] oneChar = new char[1];
 
-        // write the character unmodified unless filtering is enabled and
-        // the character is a "<" in which case &lt; is written
+        // always delegate to write(char[], int, int) otherwise in some VM
+        // it cause endless cycle and StackOverflowError
         public void write(final int character)
         {
-            if (doFilter)
-            {
-                switch (character)
-                {
-                    case '<':
-                        super.write('&');
-                        super.write('l');
-                        super.write('t');
-                        super.write(';');
-                        break;
-                    case '>':
-                        super.write('&');
-                        super.write('g');
-                        super.write('t');
-                        super.write(';');
-                        break;
-                    case '&':
-                        super.write('&');
-                        super.write('a');
-                        super.write('m');
-                        super.write('p');
-                        super.write(';');
-                        break;
-                    case ' ':
-                        super.write('&');
-                        super.write('n');
-                        super.write('b');
-                        super.write('s');
-                        super.write('p');
-                        super.write(';');
-                        break;
-                    case '\r':
-                    case '\n':
-                        if (oldch != '\r' && oldch != '\n')
-                        {// don't add twice <br>
-                            super.write('<');
-                            super.write('b');
-                            super.write('r');
-                            super.write('/');
-                            super.write('>');
-                            super.write('\n');
-                        }
-                        break;
-                    default:
-                        super.write(character);
-                }
-            }
-            else
+            synchronized (oneChar)
             {
-                super.write(character);
+                oneChar[0] = (char) character;
+                write(oneChar, 0, 1);
             }
-            oldch = character;
         }
 
-
         // write the characters unmodified unless filtering is enabled in
         // which case the writeFiltered(String) method is called for filtering
-        public void write( final char[] chars, final int off, final int len )
+        public void write(char[] chars, int off, int len)
         {
-            if ( doFilter )
-            {
-                for (int i = off; i < len; i++)
-                {
-                    this.write(chars[i]);
-                }
-            }
-            else
+            if (doFilter)
             {
-                super.write( chars, off, len );
+                chars = WebConsoleUtil.escapeHtml(new String(chars, off, len)).toCharArray();
+                off = 0;
+                len = chars.length;
             }
+            super.write(chars, off, len);
         }