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 < 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);
}