Added proper escaping to source code display to prevent HTML-in-code weirdnesses.  Also handles the case of null source code correctly.

Suggested by: bruce
Patch by: scottb, jgw (pair prog)
Review by: bruce, jat, mmendez, tobyr (desk check)


git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/1.4@1389 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/tools/benchmark-viewer/src/com/google/gwt/junit/viewer/client/ReportViewer.java b/tools/benchmark-viewer/src/com/google/gwt/junit/viewer/client/ReportViewer.java
index 47112fe..6d9583b 100644
--- a/tools/benchmark-viewer/src/com/google/gwt/junit/viewer/client/ReportViewer.java
+++ b/tools/benchmark-viewer/src/com/google/gwt/junit/viewer/client/ReportViewer.java
@@ -18,6 +18,8 @@
 import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.http.client.URL;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Element;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.rpc.ServiceDefTarget;
 import com.google.gwt.user.client.ui.Button;
@@ -218,8 +220,17 @@
         benchmarkTable.setCellPadding(5);
         benchmarkTable.setText(0, 0, benchmark.getName());
         // benchmarkTable.setText(0, 1, benchmark.getDescription());
-        benchmarkTable.setWidget(1, 0, new HTML("<pre>"
-            + benchmark.getSourceCode() + "</pre>"));
+        String codeHtml;
+        String sourceText = benchmark.getSourceCode();
+        if (sourceText != null) {
+          Element tempElem = DOM.createDiv();
+          DOM.setInnerText(tempElem, sourceText);
+          String escapedCodeHtml = DOM.getInnerHTML(tempElem);
+          codeHtml = "<pre>" + escapedCodeHtml + "</pre>";
+        } else {
+          codeHtml = "<i>(source not available)</i>";
+        }
+        benchmarkTable.setWidget(1, 0, new HTML(codeHtml));
         benchmarkTable.getFlexCellFormatter().setStyleName(0, 0,
             "benchmark-name");
         // benchmarkTable.getFlexCellFormatter().setStyleName( 0, 1,