[tor-commits] [onionoo/master] Avoid String.replaceAll() because of memory issues.

karsten at torproject.org karsten at torproject.org
Tue Nov 4 09:22:57 UTC 2014


commit f660e24be80b2efed1423b9ebf912377ccea49d5
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Mon Oct 27 09:06:30 2014 +0100

    Avoid String.replaceAll() because of memory issues.
    
    From a quick look at the sources it seems that they're using
    String.indexOf() to find patterns rather than regular expressions which
    is what String.replaceAll() uses.
---
 .../java/org/torproject/onionoo/docs/DetailsDocument.java     |    9 +++++----
 src/main/java/org/torproject/onionoo/docs/DetailsStatus.java  |    9 +++++----
 src/main/java/org/torproject/onionoo/docs/DocumentStore.java  |    5 +++--
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java b/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java
index bda9865..7d351ee 100644
--- a/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java
+++ b/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java
@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
 
 public class DetailsDocument extends Document {
 
@@ -18,12 +19,12 @@ public class DetailsDocument extends Document {
    * we'll have to do is to change back the '\\' that Gson writes for the
    * '\'. */
   private static String escapeJSON(String s) {
-    return s == null ? null :
-        StringEscapeUtils.escapeJavaScript(s).replaceAll("\\\\'", "'");
+    return StringUtils.replaceEach(StringEscapeUtils.escapeJavaScript(s),
+        new String[] { "\\\\'" }, new String[] { "'" });
   }
   private static String unescapeJSON(String s) {
-    return s == null ? null :
-        StringEscapeUtils.unescapeJavaScript(s.replaceAll("'", "\\'"));
+    return StringEscapeUtils.unescapeJavaScript(StringUtils.replaceEach(s,
+        new String[] { "'" }, new String[] { "\\'" }));
   }
 
   private String nickname;
diff --git a/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java b/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java
index 6fe0d80..6d987df 100644
--- a/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java
@@ -6,6 +6,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
 
 public class DetailsStatus extends Document {
 
@@ -18,12 +19,12 @@ public class DetailsStatus extends Document {
    * we'll have to do is to change back the '\\' that Gson writes for the
    * '\'. */
   private static String escapeJSON(String s) {
-    return s == null ? null :
-        StringEscapeUtils.escapeJavaScript(s).replaceAll("\\\\'", "'");
+    return StringUtils.replaceEach(StringEscapeUtils.escapeJavaScript(s),
+        new String[] { "\\\\'" }, new String[] { "'" });
   }
   private static String unescapeJSON(String s) {
-    return s == null ? null :
-        StringEscapeUtils.unescapeJavaScript(s.replaceAll("'", "\\'"));
+    return StringEscapeUtils.unescapeJavaScript(StringUtils.replaceEach(s,
+        new String[] { "'" }, new String[] { "\\'" }));
   }
 
   private String desc_published;
diff --git a/src/main/java/org/torproject/onionoo/docs/DocumentStore.java b/src/main/java/org/torproject/onionoo/docs/DocumentStore.java
index e3261e4..9a808ac 100644
--- a/src/main/java/org/torproject/onionoo/docs/DocumentStore.java
+++ b/src/main/java/org/torproject/onionoo/docs/DocumentStore.java
@@ -21,6 +21,7 @@ import java.util.Stack;
 import java.util.TreeMap;
 import java.util.TreeSet;
 
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.torproject.onionoo.util.FormattingUtils;
@@ -275,8 +276,8 @@ public class DocumentStore {
        * objects are escaped JSON, e.g., \u00F2.  When Gson serlializes
        * this string, it escapes the \ to \\, hence writes \\u00F2.  We
        * need to undo this and change \\u00F2 back to \u00F2. */
-      documentString = gson.toJson(document).replaceAll("\\\\\\\\u",
-          "\\\\u");
+      documentString = StringUtils.replace(gson.toJson(document),
+          "\\\\\\\\u", "\\\\u");
       /* Existing details statuses don't contain opening and closing curly
        * brackets, so we should remove them from new details statuses,
        * too. */





More information about the tor-commits mailing list