costin 01/05/20 21:05:32
Modified: src/share/org/apache/tomcat/modules/generators
StaticInterceptor.java
Log:
Fix for #210.
Static interceptor now corectly encodes the special characters.
Revision Changes Path
1.12 +94 -76
jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java
Index: StaticInterceptor.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/modules/generators/StaticInterceptor.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- StaticInterceptor.java 2001/04/10 07:01:12 1.11
+++ StaticInterceptor.java 2001/05/21 04:05:31 1.12
@@ -441,39 +441,49 @@
}
}
+ OutputBuffer buf=res.getBuffer();
if( sbNote==0 ) {
- sbNote=req.getContextManager().getNoteId(ContextManager.REQUEST_NOTE,
- "RedirectHandler.buff");
+ //sbNote=req.getContextManager().
+ // getNoteId(ContextManager.REQUEST_NOTE,
+ // "RedirectHandler.buff");
+ sbNote=req.getContextManager().
+ getNoteId(ContextManager.REQUEST_NOTE,"uft8encoder");
}
// we can recycle it because
// we don't call toString();
- StringBuffer buf=(StringBuffer)req.getNote( sbNote );
- if( buf==null ) {
- buf = new StringBuffer();
- req.setNote( sbNote, buf );
+ // StringBuffer buf=(StringBuffer)req.getNote( sbNote );
+ // if( buf==null ) {
+ // buf = new StringBuffer();
+ // req.setNote( sbNote, buf );
+ // }
+
+ Encoder utfEncoder=(Encoder)req.getNote( sbNote );
+ if( utfEncoder==null ) {
+ utfEncoder=new Encoder();
+ utfEncoder.addSafeCharacter( '/' );
}
if (! inInclude) {
res.setContentType("text/html");
- buf.append("<html>\r\n");
- buf.append("<head>\r\n");
- buf.append("<title>")
- .append(sm.getString("defaultservlet.directorylistingfor"))
- .append(requestURI);
- buf.append("</title>\r\n</head><body bgcolor=white>\r\n");
+ buf.write("<html>\r\n");
+ buf.write("<head>\r\n");
+ buf.write("<title>");
+ buf.write(sm.getString("defaultservlet.directorylistingfor"));
+ buf.write(requestURI);
+ buf.write("</title>\r\n</head><body bgcolor=white>\r\n");
}
- buf.append("<table width=90% cellspacing=0 ");
- buf.append("cellpadding=5 align=center>");
- buf.append("<tr><td colspan=3><font size=+2><strong>");
- buf.append(sm.getString("defaultservlet.directorylistingfor"))
- .append(requestURI);
- buf.append("</strong></td></tr>\r\n");
+ buf.write("<table width=90% cellspacing=0 ");
+ buf.write("cellpadding=5 align=center>");
+ buf.write("<tr><td colspan=3><font size=+2><strong>");
+ buf.write(sm.getString("defaultservlet.directorylistingfor"));
+ buf.write(requestURI);
+ buf.write("</strong></td></tr>\r\n");
if (! pathInfo.equals("/")) {
- buf.append("<tr><td colspan=3 bgcolor=#ffffff>");
- //buf.append("<a href=\"../\">Up one directory");
+ buf.write("<tr><td colspan=3 bgcolor=#ffffff>");
+ //buf.write("<a href=\"../\">Up one directory");
String toPath = requestURI;
@@ -487,9 +497,12 @@
toPath = "/";
}
- buf.append("<a href=\"" + toPath + "\"><tt>"+
- sm.getString("defaultservlet.upto")+ toPath);
- buf.append("</tt></a></td></tr>\r\n");
+ buf.write("<a href=\"");
+ utfEncoder.urlEncode( buf, toPath);
+ buf.write( "\"><tt>" );
+ buf.write( sm.getString("defaultservlet.upto"));
+ buf.write( toPath);
+ buf.write("</tt></a></td></tr>\r\n");
}
// Pre-calculate the request URI for efficiency
@@ -521,37 +534,37 @@
if (f.isDirectory()) {
if( dirsHead ) {
dirsHead=false;
- buf.append("<tr><td colspan=3 bgcolor=#cccccc>");
- buf.append("<font size=+2><strong>").
- append( sm.getString("defaultservlet.subdirectories")).
- append( "</strong>\r\n");
- buf.append("</font></td></tr>\r\n");
+ buf.write("<tr><td colspan=3 bgcolor=#cccccc>");
+ buf.write("<font size=+2><strong>");
+ buf.write( sm.getString("defaultservlet.subdirectories"));
+ buf.write( "</strong>\r\n");
+ buf.write("</font></td></tr>\r\n");
}
String fileN = f.getName();
- buf.append("<tr");
+ buf.write("<tr");
- if (shaderow) buf.append(" bgcolor=#eeeeee");
+ if (shaderow) buf.write(" bgcolor=#eeeeee");
shaderow=!shaderow;
- buf.append("><td> ");
- buf.append("<tt><a href=\"")
- .append(slashedRequestURI)
- .append(fileN)
- .append("\">")
- .append(fileN)
- .append("/</a> ")
- .append("</tt>\r\n");
- buf.append("</td><td><tt> </tt></td>");
- buf.append("<td align=right><tt>");
- buf.append(dateFormat.format(new Date(f.lastModified())));
- buf.append("</tt></td></tr>\r\n");
+ buf.write("><td> ");
+ buf.write("<tt><a href=\"");
+ utfEncoder.urlEncode( buf, slashedRequestURI);
+ utfEncoder.urlEncode( buf, fileN);
+ buf.write("\">");
+ buf.write(fileN);
+ buf.write("/</a> ");
+ buf.write("</tt>\r\n");
+ buf.write("</td><td><tt> </tt></td>");
+ buf.write("<td align=right><tt>");
+ buf.write(dateFormat.format(new Date(f.lastModified())));
+ buf.write("</tt></td></tr>\r\n");
}
}
shaderow = false;
- buf.append("<tr><td colspan=3 bgcolor=#ffffff> </td></tr>");
+ buf.write("<tr><td colspan=3 bgcolor=#ffffff> </td></tr>");
boolean fileHead=true;
for (int i = 0; i < fileNames.length; i++) {
@@ -562,60 +575,65 @@
if( fileHead ) {
fileHead=false;
- buf.append("<tr><td colspan=4 bgcolor=#cccccc>");
- buf.append("<font size=+2><strong>")
- .append(sm.getString("defaultservlet.files"))
- .append("</strong></font></td></tr>");
+ buf.write("<tr><td colspan=4 bgcolor=#cccccc>");
+ buf.write("<font size=+2><strong>");
+ buf.write(sm.getString("defaultservlet.files"));
+ buf.write("</strong></font></td></tr>");
}
- buf.append("<tr");
+ buf.write("<tr");
- if (shaderow) buf.append(" bgcolor=#eeeeee");
+ if (shaderow) buf.write(" bgcolor=#eeeeee");
shaderow = ! shaderow;
- buf.append("><td> \r\n");
+ buf.write("><td> \r\n");
- buf.append("<tt><a href=\"")
- .append(slashedRequestURI)
- .append(fileN).append("\">")
- .append( fileN )
- .append( "</a>");
- buf.append(" </tt>");
- buf.append("</td>\r\n");
+ buf.write("<tt><a href=\"");
+ utfEncoder.urlEncode( buf, slashedRequestURI);
+ utfEncoder.urlEncode( buf, fileN);
+ buf.write("\">");
+ buf.write( fileN );
+ buf.write( "</a>");
+ buf.write(" </tt>");
+ buf.write("</td>\r\n");
- buf.append("<td align=right><tt>");
+ buf.write("<td align=right><tt>");
displaySize( buf, (int)f.length());
- buf.append("</tt></td>");
+ buf.write("</tt></td>");
- buf.append("<td align=right><tt>");
- buf.append(dateFormat.format(new Date(f.lastModified())));
- buf.append("</tt></td></tr>\r\n");
+ buf.write("<td align=right><tt>");
+ buf.write(dateFormat.format(new Date(f.lastModified())));
+ buf.write("</tt></td></tr>\r\n");
}
- buf.append("\r\n");
+ buf.write("\r\n");
}
- buf.append("<tr><td colspan=3 bgcolor=#ffffff> </td></tr>");
- buf.append("<tr><td colspan=3 bgcolor=#cccccc>");
- buf.append("<font size=-1>");
- buf.append(ContextManager.TOMCAT_NAME);
- buf.append(" v");
- buf.append(ContextManager.TOMCAT_VERSION);
- buf.append("</font></td></tr></table>");
+ buf.write("<tr><td colspan=3 bgcolor=#ffffff> </td></tr>");
+ buf.write("<tr><td colspan=3 bgcolor=#cccccc>");
+ buf.write("<font size=-1>");
+ buf.write(ContextManager.TOMCAT_NAME);
+ buf.write(" v");
+ buf.write(ContextManager.TOMCAT_VERSION);
+ buf.write("</font></td></tr></table>");
- if (! inInclude) buf.append("</body></html>\r\n");
+ if (! inInclude) buf.write("</body></html>\r\n");
- res.getBuffer().write(buf);
- buf.setLength(0);
+ // res.getBuffer().write(buf);
+ // buf.setLength(0);
}
- void displaySize( StringBuffer buf, int filesize ) {
+ void displaySize( OutputBuffer buf, int filesize )
+ throws IOException
+ {
int leftside = filesize / 1024;
int rightside = (filesize % 1024) / 103; // makes 1 digit
// To avoid 0.0 for non-zero file, we bump to 0.1
if (leftside == 0 && rightside == 0 && filesize != 0)
rightside = 1;
- buf.append(leftside).append(".").append(rightside);
- buf.append(" KB");
+ buf.write(leftside);
+ buf.write(".");
+ buf.write(rightside);
+ buf.write(" KB");
}
}