You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by aw...@apache.org on 2007/06/29 19:43:08 UTC
svn commit: r551975 - in
/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal:
io/HtmlResponseWriter.java share/url/EncoderUtils.java
Author: awiner
Date: Fri Jun 29 10:43:07 2007
New Revision: 551975
URL: http://svn.apache.org/viewvc?view=rev&rev=551975
Log:
TRINIDAD-84: Validity: in URI attributes, ampersands should be escaped as &
- Add alternative codepaths to EncoderUtils where '&' becomes '&'
Modified:
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/HtmlResponseWriter.java
myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/share/url/EncoderUtils.java
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/HtmlResponseWriter.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/HtmlResponseWriter.java?view=diff&rev=551975&r1=551974&r2=551975
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/HtmlResponseWriter.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/io/HtmlResponseWriter.java Fri Jun 29 10:43:07 2007
@@ -275,7 +275,7 @@
if (stringValue.startsWith("javascript:"))
HTMLEscapes.writeAttribute(out, _buffer, stringValue);
else
- EncoderUtils.writeURL(out, stringValue, _encoding, false);
+ EncoderUtils.writeURLForHTML(out, stringValue, _encoding, false);
out.write('"');
}
Modified: myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/share/url/EncoderUtils.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/share/url/EncoderUtils.java?view=diff&rev=551975&r1=551974&r2=551975
==============================================================================
--- myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/share/url/EncoderUtils.java (original)
+++ myfaces/trinidad/trunk/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/share/url/EncoderUtils.java Fri Jun 29 10:43:07 2007
@@ -153,10 +153,24 @@
String queryEncoding,
boolean useISOForBody) throws IOException, UnsupportedEncodingException
{
- _writeURL(out, text, queryEncoding, useISOForBody, 0, false);
+ _writeURL(out, text, queryEncoding, useISOForBody, 0, false, false);
}
/**
+ * A clone of writeURL(), but applying rules knowing that it
+ * is outputting HTML.
+ */
+ static public void writeURLForHTML(
+ Writer out,
+ String text,
+ String queryEncoding,
+ boolean useISOForBody) throws IOException, UnsupportedEncodingException
+ {
+ _writeURL(out, text, queryEncoding, useISOForBody, 0, false, true);
+ }
+
+
+ /**
* Writes a query parameter. Very few clients will
* need to use this method - most will just call
* writeURL or encodeURL.
@@ -165,9 +179,10 @@
Writer out,
String text,
String encoding,
- int start) throws IOException, UnsupportedEncodingException
+ int start,
+ boolean forHtml) throws IOException, UnsupportedEncodingException
{
- _encodeString(out, text, encoding, start, _DONT_ENCODE_SET, true);
+ _encodeString(out, text, encoding, start, _DONT_ENCODE_SET, true, forHtml);
}
@@ -306,7 +321,8 @@
String queryEncoding,
boolean useISOForBody,
int start,
- boolean inAnchor) throws IOException, UnsupportedEncodingException
+ boolean inAnchor,
+ boolean forHtml) throws IOException, UnsupportedEncodingException
{
int length = text.length();
@@ -429,10 +445,17 @@
// as if it were in the request's character set. So use
// the real encoding for those!
out.write('?');
- writeQueryParameters(out, text, queryEncoding, i + 1);
+ writeQueryParameters(out, text, queryEncoding, i + 1, forHtml);
return;
}
}
+ else if (ch == '&')
+ {
+ if (forHtml)
+ out.write("&");
+ else
+ out.write(ch);
+ }
else
{
out.write(ch);
@@ -493,7 +516,7 @@
StringWriter sw = new StringWriter(text.length());
try
{
- _encodeString(sw, text, encoding, 0, _DONT_ENCODE_SET_SMALL, false);
+ _encodeString(sw, text, encoding, 0, _DONT_ENCODE_SET_SMALL, false, false);
}
catch (UnsupportedEncodingException uee)
{
@@ -614,7 +637,8 @@
String encoding,
int start,
BitSet dontEncodeSet,
- boolean lookForAnchor)
+ boolean lookForAnchor,
+ boolean forHtml)
throws IOException, UnsupportedEncodingException
{
ByteArrayOutputStream buf = null;
@@ -631,12 +655,19 @@
if (lookForAnchor && ('#' == ch))
{
out.write(ch);
- _writeURL(out, text, encoding, false, i + 1, true);
+ _writeURL(out, text, encoding, false, i + 1, true, forHtml);
return;
}
else if (dontEncodeSet.get(ch))
{
- out.write(ch);
+ if (forHtml && (ch == '&'))
+ {
+ out.write("&");
+ }
+ else
+ {
+ out.write(ch);
+ }
}
else
{