提交 b29e0c9c 编写于 作者: J jbachorik

8011081: Improve jhat

Summary: Properly escape HTML output
Reviewed-by: alanb, mschoene, sundar
上级 4e048aa1
...@@ -84,7 +84,7 @@ class AllClassesQuery extends QueryHandler { ...@@ -84,7 +84,7 @@ class AllClassesQuery extends QueryHandler {
lastPackage = pkg; lastPackage = pkg;
printClass(clazz); printClass(clazz);
if (clazz.getId() != -1) { if (clazz.getId() != -1) {
out.print(" [" + clazz.getIdString() + "]"); print(" [" + clazz.getIdString() + "]");
} }
out.println("<br>"); out.println("<br>");
} }
......
...@@ -112,12 +112,12 @@ class ClassQuery extends QueryHandler { ...@@ -112,12 +112,12 @@ class ClassQuery extends QueryHandler {
out.println("<h2>Instances</h2>"); out.println("<h2>Instances</h2>");
printAnchorStart(); printAnchorStart();
out.print("instances/" + encodeForURL(clazz)); print("instances/" + encodeForURL(clazz));
out.print("\">"); out.print("\">");
out.println("Exclude subclasses</a><br>"); out.println("Exclude subclasses</a><br>");
printAnchorStart(); printAnchorStart();
out.print("allInstances/" + encodeForURL(clazz)); print("allInstances/" + encodeForURL(clazz));
out.print("\">"); out.print("\">");
out.println("Include subclasses</a><br>"); out.println("Include subclasses</a><br>");
...@@ -126,19 +126,19 @@ class ClassQuery extends QueryHandler { ...@@ -126,19 +126,19 @@ class ClassQuery extends QueryHandler {
out.println("<h2>New Instances</h2>"); out.println("<h2>New Instances</h2>");
printAnchorStart(); printAnchorStart();
out.print("newInstances/" + encodeForURL(clazz)); print("newInstances/" + encodeForURL(clazz));
out.print("\">"); out.print("\">");
out.println("Exclude subclasses</a><br>"); out.println("Exclude subclasses</a><br>");
printAnchorStart(); printAnchorStart();
out.print("allNewInstances/" + encodeForURL(clazz)); print("allNewInstances/" + encodeForURL(clazz));
out.print("\">"); out.print("\">");
out.println("Include subclasses</a><br>"); out.println("Include subclasses</a><br>");
} }
out.println("<h2>References summary by Type</h2>"); out.println("<h2>References summary by Type</h2>");
printAnchorStart(); printAnchorStart();
out.print("refsByType/" + encodeForURL(clazz)); print("refsByType/" + encodeForURL(clazz));
out.print("\">"); out.print("\">");
out.println("References summary by type</a>"); out.println("References summary by type</a>");
......
...@@ -41,21 +41,17 @@ package com.sun.tools.hat.internal.server; ...@@ -41,21 +41,17 @@ package com.sun.tools.hat.internal.server;
import java.net.Socket; import java.net.Socket;
import java.net.ServerSocket;
import java.net.InetAddress;
import java.io.InputStream; import java.io.InputStream;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.Writer;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.BufferedOutputStream;
import com.sun.tools.hat.internal.model.Snapshot; import com.sun.tools.hat.internal.model.Snapshot;
import com.sun.tools.hat.internal.oql.OQLEngine; import com.sun.tools.hat.internal.oql.OQLEngine;
import com.sun.tools.hat.internal.util.Misc;
public class HttpReader implements Runnable { public class HttpReader implements Runnable {
...@@ -87,7 +83,7 @@ public class HttpReader implements Runnable { ...@@ -87,7 +83,7 @@ public class HttpReader implements Runnable {
outputError("Protocol error"); outputError("Protocol error");
} }
int data; int data;
StringBuffer queryBuf = new StringBuffer(); StringBuilder queryBuf = new StringBuilder();
while ((data = in.read()) != -1 && data != ' ') { while ((data = in.read()) != -1 && data != ' ') {
char ch = (char) data; char ch = (char) data;
queryBuf.append(ch); queryBuf.append(ch);
...@@ -217,7 +213,7 @@ public class HttpReader implements Runnable { ...@@ -217,7 +213,7 @@ public class HttpReader implements Runnable {
private void outputError(String msg) { private void outputError(String msg) {
out.println(); out.println();
out.println("<html><body bgcolor=\"#ffffff\">"); out.println("<html><body bgcolor=\"#ffffff\">");
out.println(msg); out.println(Misc.encodeHtml(msg));
out.println("</body></html>"); out.println("</body></html>");
} }
......
...@@ -102,7 +102,7 @@ class InstancesCountQuery extends QueryHandler { ...@@ -102,7 +102,7 @@ class InstancesCountQuery extends QueryHandler {
int count = clazz.getInstancesCount(false); int count = clazz.getInstancesCount(false);
print("" + count); print("" + count);
printAnchorStart(); printAnchorStart();
out.print("instances/" + encodeForURL(classes[i])); print("instances/" + encodeForURL(classes[i]));
out.print("\"> "); out.print("\"> ");
if (count == 1) { if (count == 1) {
print("instance"); print("instance");
...@@ -121,7 +121,7 @@ class InstancesCountQuery extends QueryHandler { ...@@ -121,7 +121,7 @@ class InstancesCountQuery extends QueryHandler {
} }
print("("); print("(");
printAnchorStart(); printAnchorStart();
out.print("newInstances/" + encodeForURL(classes[i])); print("newInstances/" + encodeForURL(classes[i]));
out.print("\">"); out.print("\">");
print("" + newInst + " new"); print("" + newInst + " new");
out.print("</a>) "); out.print("</a>) ");
......
...@@ -54,10 +54,7 @@ class OQLHelp extends QueryHandler { ...@@ -54,10 +54,7 @@ class OQLHelp extends QueryHandler {
out.print((char)ch); out.print((char)ch);
} }
} catch (Exception exp) { } catch (Exception exp) {
out.println(exp.getMessage()); printException(exp);
out.println("<pre>");
exp.printStackTrace(out);
out.println("</pre>");
} }
} }
} }
...@@ -32,10 +32,7 @@ ...@@ -32,10 +32,7 @@
package com.sun.tools.hat.internal.server; package com.sun.tools.hat.internal.server;
import com.sun.tools.hat.internal.model.*;
import com.sun.tools.hat.internal.oql.*; import com.sun.tools.hat.internal.oql.*;
import com.sun.tools.hat.internal.util.ArraySorter;
import com.sun.tools.hat.internal.util.Comparer;
/** /**
* This handles Object Query Language (OQL) queries. * This handles Object Query Language (OQL) queries.
...@@ -68,7 +65,7 @@ class OQLQuery extends QueryHandler { ...@@ -68,7 +65,7 @@ class OQLQuery extends QueryHandler {
out.println("<p align='center'>"); out.println("<p align='center'>");
out.println("<textarea name='query' cols=80 rows=10>"); out.println("<textarea name='query' cols=80 rows=10>");
if (oql != null) { if (oql != null) {
out.println(oql); println(oql);
} }
out.println("</textarea>"); out.println("</textarea>");
out.println("</p>"); out.println("</p>");
...@@ -91,10 +88,7 @@ class OQLQuery extends QueryHandler { ...@@ -91,10 +88,7 @@ class OQLQuery extends QueryHandler {
try { try {
out.println(engine.toHtml(o)); out.println(engine.toHtml(o));
} catch (Exception e) { } catch (Exception e) {
out.println(e.getMessage()); printException(e);
out.println("<pre>");
e.printStackTrace(out);
out.println("</pre>");
} }
out.println("</td></tr>"); out.println("</td></tr>");
return false; return false;
...@@ -102,10 +96,7 @@ class OQLQuery extends QueryHandler { ...@@ -102,10 +96,7 @@ class OQLQuery extends QueryHandler {
}); });
out.println("</table>"); out.println("</table>");
} catch (OQLException exp) { } catch (OQLException exp) {
out.println(exp.getMessage()); printException(exp);
out.println("<pre>");
exp.printStackTrace(out);
out.println("</pre>");
} }
} }
......
...@@ -36,6 +36,7 @@ import java.io.PrintWriter; ...@@ -36,6 +36,7 @@ import java.io.PrintWriter;
import com.sun.tools.hat.internal.model.*; import com.sun.tools.hat.internal.model.*;
import com.sun.tools.hat.internal.util.Misc; import com.sun.tools.hat.internal.util.Misc;
import java.io.StringWriter;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
...@@ -96,7 +97,7 @@ abstract class QueryHandler { ...@@ -96,7 +97,7 @@ abstract class QueryHandler {
} }
protected void error(String msg) { protected void error(String msg) {
out.println(msg); println(msg);
} }
protected void printAnchorStart() { protected void printAnchorStart() {
...@@ -160,7 +161,6 @@ abstract class QueryHandler { ...@@ -160,7 +161,6 @@ abstract class QueryHandler {
out.println("null"); out.println("null");
return; return;
} }
String name = clazz.getName();
printAnchorStart(); printAnchorStart();
out.print("class/"); out.print("class/");
print(encodeForURL(clazz)); print(encodeForURL(clazz));
...@@ -208,6 +208,15 @@ abstract class QueryHandler { ...@@ -208,6 +208,15 @@ abstract class QueryHandler {
} }
} }
protected void printException(Throwable t) {
println(t.getMessage());
out.println("<pre>");
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
print(sw.toString());
out.println("</pre>");
}
protected void printHex(long addr) { protected void printHex(long addr) {
if (snapshot.getIdentifierSize() == 4) { if (snapshot.getIdentifierSize() == 4) {
out.print(Misc.toHex((int)addr)); out.print(Misc.toHex((int)addr));
...@@ -223,4 +232,8 @@ abstract class QueryHandler { ...@@ -223,4 +232,8 @@ abstract class QueryHandler {
protected void print(String str) { protected void print(String str) {
out.print(Misc.encodeHtml(str)); out.print(Misc.encodeHtml(str));
} }
protected void println(String str) {
out.println(Misc.encodeHtml(str));
}
} }
...@@ -89,7 +89,7 @@ public class RefsByTypeQuery extends QueryHandler { ...@@ -89,7 +89,7 @@ public class RefsByTypeQuery extends QueryHandler {
out.println("<p align='center'>"); out.println("<p align='center'>");
printClass(clazz); printClass(clazz);
if (clazz.getId() != -1) { if (clazz.getId() != -1) {
out.println("[" + clazz.getIdString() + "]"); println("[" + clazz.getIdString() + "]");
} }
out.println("</p>"); out.println("</p>");
...@@ -125,9 +125,9 @@ public class RefsByTypeQuery extends QueryHandler { ...@@ -125,9 +125,9 @@ public class RefsByTypeQuery extends QueryHandler {
JavaClass clazz = classes[i]; JavaClass clazz = classes[i];
out.println("<tr><td>"); out.println("<tr><td>");
out.print("<a href='/refsByType/"); out.print("<a href='/refsByType/");
out.print(clazz.getIdString()); print(clazz.getIdString());
out.print("'>"); out.print("'>");
out.print(clazz.getName()); print(clazz.getName());
out.println("</a>"); out.println("</a>");
out.println("</td><td>"); out.println("</td><td>");
out.println(map.get(clazz)); out.println(map.get(clazz));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册