You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2007/03/27 17:53:16 UTC
svn commit: r522964 - in /tomcat/tc6.0.x/trunk/java/org/apache/jasper:
compiler/JspUtil.java compiler/ParserController.java
xmlparser/XMLEncodingDetector.java
Author: remm
Date: Tue Mar 27 08:53:15 2007
New Revision: 522964
URL: http://svn.apache.org/viewvc?view=rev&rev=522964
Log:
- Skip BOM when reading a JSP.
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java
tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ParserController.java
tomcat/tc6.0.x/trunk/java/org/apache/jasper/xmlparser/XMLEncodingDetector.java
Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java?view=diff&rev=522964&r1=522963&r2=522964
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/JspUtil.java Tue Mar 27 08:53:15 2007
@@ -1034,21 +1034,32 @@
}
static InputStreamReader getReader(String fname, String encoding,
- JarFile jarFile,
- JspCompilationContext ctxt,
- ErrorDispatcher err)
- throws JasperException, IOException {
+ JarFile jarFile,
+ JspCompilationContext ctxt,
+ ErrorDispatcher err)
+ throws JasperException, IOException {
- InputStreamReader reader = null;
- InputStream in = getInputStream(fname, jarFile, ctxt, err);
+ return getReader(fname, encoding, jarFile, ctxt, err, 0);
+ }
+
+ static InputStreamReader getReader(String fname, String encoding,
+ JarFile jarFile,
+ JspCompilationContext ctxt,
+ ErrorDispatcher err, int skip)
+ throws JasperException, IOException {
- try {
+ InputStreamReader reader = null;
+ InputStream in = getInputStream(fname, jarFile, ctxt, err);
+ for (int i = 0; i < skip; i++) {
+ in.read();
+ }
+ try {
reader = new InputStreamReader(in, encoding);
- } catch (UnsupportedEncodingException ex) {
- err.jspError("jsp.error.unsupported.encoding", encoding);
- }
+ } catch (UnsupportedEncodingException ex) {
+ err.jspError("jsp.error.unsupported.encoding", encoding);
+ }
- return reader;
+ return reader;
}
/**
Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ParserController.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ParserController.java?view=diff&rev=522964&r1=522963&r2=522964
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ParserController.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ParserController.java Tue Mar 27 08:53:15 2007
@@ -62,6 +62,7 @@
private boolean isEncodingSpecifiedInProlog;
private boolean isBomPresent;
+ private int skip;
private String sourceEnc;
@@ -208,7 +209,7 @@
InputStreamReader inStreamReader = null;
try {
inStreamReader = JspUtil.getReader(absFileName, sourceEnc,
- jarFile, ctxt, err);
+ jarFile, ctxt, err, skip);
JspReader jspReader = new JspReader(ctxt, absFileName,
sourceEnc, inStreamReader,
err);
@@ -314,6 +315,7 @@
if (((Boolean) ret[2]).booleanValue()) {
isBomPresent = true;
}
+ skip = ((Integer) ret[3]).intValue();
if (!isXml && sourceEnc.equals("UTF-8")) {
/*
Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/xmlparser/XMLEncodingDetector.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/xmlparser/XMLEncodingDetector.java?view=diff&rev=522964&r1=522963&r2=522964
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/xmlparser/XMLEncodingDetector.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/xmlparser/XMLEncodingDetector.java Tue Mar 27 08:53:15 2007
@@ -44,6 +44,7 @@
private String encoding;
private boolean isEncodingSetInProlog;
private boolean isBomPresent;
+ private int skip;
private Boolean isBigEndian;
private Reader reader;
@@ -122,8 +123,9 @@
scanXMLDecl();
return new Object[] { this.encoding,
- new Boolean(this.isEncodingSetInProlog),
- new Boolean(this.isBomPresent) };
+ Boolean.valueOf(this.isEncodingSetInProlog),
+ Boolean.valueOf(this.isBomPresent),
+ Integer.valueOf(this.skip) };
}
// stub method
@@ -149,10 +151,13 @@
Object [] encodingDesc = getEncodingName(b4, count);
encoding = (String)(encodingDesc[0]);
isBigEndian = (Boolean)(encodingDesc[1]);
- if (encodingDesc.length > 2) {
+
+ if (encodingDesc.length > 3) {
isBomPresent = (Boolean)(encodingDesc[2]);
+ skip = (Integer)(encodingDesc[3]);
} else {
isBomPresent = true;
+ skip = (Integer)(encodingDesc[2]);
}
stream.reset();
@@ -285,7 +290,7 @@
private Object[] getEncodingName(byte[] b4, int count) {
if (count < 2) {
- return new Object[]{"UTF-8", null, Boolean.FALSE};
+ return new Object[]{"UTF-8", null, Boolean.FALSE, Integer.valueOf(0)};
}
// UTF-16, with BOM
@@ -293,70 +298,70 @@
int b1 = b4[1] & 0xFF;
if (b0 == 0xFE && b1 == 0xFF) {
// UTF-16, big-endian
- return new Object [] {"UTF-16BE", Boolean.TRUE};
+ return new Object [] {"UTF-16BE", Boolean.TRUE, Integer.valueOf(2)};
}
if (b0 == 0xFF && b1 == 0xFE) {
// UTF-16, little-endian
- return new Object [] {"UTF-16LE", Boolean.FALSE};
+ return new Object [] {"UTF-16LE", Boolean.FALSE, Integer.valueOf(2)};
}
// default to UTF-8 if we don't have enough bytes to make a
// good determination of the encoding
if (count < 3) {
- return new Object [] {"UTF-8", null, Boolean.FALSE};
+ return new Object [] {"UTF-8", null, Boolean.FALSE, Integer.valueOf(0)};
}
// UTF-8 with a BOM
int b2 = b4[2] & 0xFF;
if (b0 == 0xEF && b1 == 0xBB && b2 == 0xBF) {
- return new Object [] {"UTF-8", null};
+ return new Object [] {"UTF-8", null, Integer.valueOf(3)};
}
// default to UTF-8 if we don't have enough bytes to make a
// good determination of the encoding
if (count < 4) {
- return new Object [] {"UTF-8", null};
+ return new Object [] {"UTF-8", null, Integer.valueOf(0)};
}
// other encodings
int b3 = b4[3] & 0xFF;
if (b0 == 0x00 && b1 == 0x00 && b2 == 0x00 && b3 == 0x3C) {
// UCS-4, big endian (1234)
- return new Object [] {"ISO-10646-UCS-4", new Boolean(true)};
+ return new Object [] {"ISO-10646-UCS-4", new Boolean(true), Integer.valueOf(4)};
}
if (b0 == 0x3C && b1 == 0x00 && b2 == 0x00 && b3 == 0x00) {
// UCS-4, little endian (4321)
- return new Object [] {"ISO-10646-UCS-4", new Boolean(false)};
+ return new Object [] {"ISO-10646-UCS-4", new Boolean(false), Integer.valueOf(4)};
}
if (b0 == 0x00 && b1 == 0x00 && b2 == 0x3C && b3 == 0x00) {
// UCS-4, unusual octet order (2143)
// REVISIT: What should this be?
- return new Object [] {"ISO-10646-UCS-4", null};
+ return new Object [] {"ISO-10646-UCS-4", null, Integer.valueOf(4)};
}
if (b0 == 0x00 && b1 == 0x3C && b2 == 0x00 && b3 == 0x00) {
// UCS-4, unusual octect order (3412)
// REVISIT: What should this be?
- return new Object [] {"ISO-10646-UCS-4", null};
+ return new Object [] {"ISO-10646-UCS-4", null, Integer.valueOf(4)};
}
if (b0 == 0x00 && b1 == 0x3C && b2 == 0x00 && b3 == 0x3F) {
// UTF-16, big-endian, no BOM
// (or could turn out to be UCS-2...
// REVISIT: What should this be?
- return new Object [] {"UTF-16BE", new Boolean(true)};
+ return new Object [] {"UTF-16BE", new Boolean(true), Integer.valueOf(4)};
}
if (b0 == 0x3C && b1 == 0x00 && b2 == 0x3F && b3 == 0x00) {
// UTF-16, little-endian, no BOM
// (or could turn out to be UCS-2...
- return new Object [] {"UTF-16LE", new Boolean(false)};
+ return new Object [] {"UTF-16LE", new Boolean(false), Integer.valueOf(4)};
}
if (b0 == 0x4C && b1 == 0x6F && b2 == 0xA7 && b3 == 0x94) {
// EBCDIC
// a la xerces1, return CP037 instead of EBCDIC here
- return new Object [] {"CP037", null};
+ return new Object [] {"CP037", null, Integer.valueOf(4)};
}
// default encoding
- return new Object [] {"UTF-8", null, Boolean.FALSE};
+ return new Object [] {"UTF-8", null, Boolean.FALSE, Integer.valueOf(0)};
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org