Author: toad
Date: 2007-04-27 15:21:40 +0000 (Fri, 27 Apr 2007)
New Revision: 13010

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/l10n/L10n.java
   trunk/freenet/src/freenet/support/HTMLNode.java
Log:
Don't allow arbitrary HTML in those strings, add a utility method

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2007-04-27 15:13:19 UTC (rev 13009)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2007-04-27 15:21:40 UTC (rev 13010)
@@ -605,13 +605,13 @@
                HTMLNode referenceInfobox = contentNode.addChild("div", 
"class", "infobox infobox-normal");
                HTMLNode headerReferenceInfobox = 
referenceInfobox.addChild("div", "class", "infobox-header");
                // FIXME better way to deal with this sort of thing???
-               headerReferenceInfobox.addChild("%", 
L10n.getString("DarknetConnectionsToadlet.myReferenceHeader", 
+               L10n.addL10nSubstitution(headerReferenceInfobox, 
"DarknetConnectionsToadlet.myReferenceHeader",
                                new String[] { "linkref", "/linkref", 
"linktext", "/linktext" },
-                               new String[] { "<a href=\"myref.fref\">", 
"</a>", "<a href=\"myref.txt\">", "</a>" }));
+                               new String[] { "<a href=\"myref.fref\">", 
"</a>", "<a href=\"myref.txt\">", "</a>" });
                HTMLNode warningSentence = 
headerReferenceInfobox.addChild("pre");
-               warningSentence.addChild("%", 
L10n.getString("DarknetConnectionsToadlet.referenceCopyWarning",
+               L10n.addL10nSubstitution(warningSentence, 
"DarknetConnectionsToadlet.referenceCopyWarning",
                                new String[] { "bold", "/bold" },
-                               new String[] { "<b>", "</b>" }));
+                               new String[] { "<b>", "</b>" });
                referenceInfobox.addChild("div", "class", 
"infobox-content").addChild("pre", "id", "reference", 
node.exportPublicFieldSet().toString());

                // our ports

Modified: trunk/freenet/src/freenet/l10n/L10n.java
===================================================================
--- trunk/freenet/src/freenet/l10n/L10n.java    2007-04-27 15:13:19 UTC (rev 
13009)
+++ trunk/freenet/src/freenet/l10n/L10n.java    2007-04-27 15:21:40 UTC (rev 
13010)
@@ -11,6 +11,7 @@
 import java.util.MissingResourceException;

 import freenet.clients.http.TranslationToadlet;
+import freenet.support.HTMLEncoder;
 import freenet.support.HTMLNode;
 import freenet.support.Logger;
 import freenet.support.SimpleFieldSet;
@@ -348,4 +349,19 @@
                        return translationOverride.get(key) != null; 
                }
        }
+       
+       /**
+        * Add a localised string with some raw HTML substitutions
+        * @param key The L10n key.
+        * @param patterns The strings to search for.
+        * @param values The strings to substitute in.
+        */
+       public static void addL10nSubstitution(HTMLNode node, String key, 
String[] patterns, String[] values) {
+               String result = HTMLEncoder.encode(getString(key));
+               assert(patterns.length == values.length);
+               for(int i=0; i<patterns.length; i++)
+                       result = result.replaceAll("\\$\\{"+patterns[i]+"\\}", 
quoteReplacement(values[i]));
+               node.addChild("%", result);
+       }
+
 }

Modified: trunk/freenet/src/freenet/support/HTMLNode.java
===================================================================
--- trunk/freenet/src/freenet/support/HTMLNode.java     2007-04-27 15:13:19 UTC 
(rev 13009)
+++ trunk/freenet/src/freenet/support/HTMLNode.java     2007-04-27 15:21:40 UTC 
(rev 13010)
@@ -9,6 +9,8 @@
 import java.util.Map;
 import java.util.Set;

+import freenet.l10n.L10n;
+
 public class HTMLNode {

        protected final String name;


Reply via email to