You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2022/10/10 15:45:22 UTC

[ofbiz-framework] branch trunk updated: Improved: Use replace() instead of replaceAll() when a regex is not used (OFBIZ-10934)

This is an automated email from the ASF dual-hosted git repository.

jleroux pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 83c2637d2e Improved: Use replace() instead of replaceAll() when a regex is not used (OFBIZ-10934)
83c2637d2e is described below

commit 83c2637d2e8ef22575ddd63aeb9af19ecbe7eb13
Author: Jacques Le Roux <ja...@les7arts.com>
AuthorDate: Mon Oct 10 17:42:06 2022 +0200

    Improved: Use replace() instead of replaceAll() when a regex is not used (OFBIZ-10934)
    
    Increases performance and clarify usage of replaceAll()
    
    Thanks: bd2019us, whoever he is, for the suggestion (patches were outdated)
---
 .../category/ftl/CatalogAltUrlSeoTransform.java    |  2 +-
 .../category/ftl/CatalogUrlSeoTransform.java       | 22 +++++++++++-----------
 .../java/org/apache/ofbiz/base/util/FileUtil.java  |  2 +-
 .../org/apache/ofbiz/base/util/HttpClient.java     |  2 +-
 .../org/apache/ofbiz/base/util/KeyStoreUtil.java   |  4 ++--
 .../org/apache/ofbiz/base/util/UtilFormatOut.java  |  2 +-
 .../java/org/apache/ofbiz/base/util/UtilHttp.java  |  4 ++--
 .../java/org/apache/ofbiz/common/CommonEvents.java |  2 +-
 .../ofbiz/entity/condition/EntityOperator.java     |  4 ++--
 .../org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java  |  2 +-
 .../java/org/apache/ofbiz/security/CsrfUtil.java   |  2 +-
 .../org/apache/ofbiz/security/SecuredUpload.java   |  2 +-
 .../apache/ofbiz/webapp/control/LoginWorker.java   |  2 +-
 .../java/org/apache/ofbiz/widget/WidgetWorker.java |  2 +-
 .../apache/ofbiz/widget/model/ModelActionUtil.java |  2 +-
 .../apache/ofbiz/widget/model/ModelFormField.java  |  2 +-
 .../widget/renderer/html/HtmlWidgetRenderer.java   |  2 +-
 .../widget/renderer/macro/MacroFormRenderer.java   |  5 ++---
 .../widget/renderer/macro/MacroTreeRenderer.java   |  2 +-
 19 files changed, 33 insertions(+), 34 deletions(-)

diff --git a/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogAltUrlSeoTransform.java b/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogAltUrlSeoTransform.java
index c6d36eabf4..e393b3bc88 100644
--- a/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogAltUrlSeoTransform.java
+++ b/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogAltUrlSeoTransform.java
@@ -168,7 +168,7 @@ public class CatalogAltUrlSeoTransform implements TemplateTransformModel {
                         LocalDispatcher dispatcher = FreeMarkerWorker.getWrappedObject("dispatcher", env);
                         Locale locale = (Locale) args.get("locale");
                         String prefixString = ((StringModel) prefix).getAsString();
-                        prefixString = prefixString.replaceAll("&#47;", "/");
+                        prefixString = prefixString.replace("&#47;", "/");
                         String contextPath = prefixString;
                         int lastSlashIndex = prefixString.lastIndexOf('/');
                         if (lastSlashIndex > -1 && lastSlashIndex < prefixString.length()) {
diff --git a/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogUrlSeoTransform.java b/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogUrlSeoTransform.java
index 4d9411942b..fad56d1263 100644
--- a/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogUrlSeoTransform.java
+++ b/applications/product/src/main/java/org/apache/ofbiz/product/category/ftl/CatalogUrlSeoTransform.java
@@ -204,11 +204,11 @@ public class CatalogUrlSeoTransform implements TemplateTransformModel {
                     if (UtilValidate.isNotEmpty(categoryName)) {
                         categoryName = SeoUrlUtil.replaceSpecialCharsUrl(categoryName.trim());
                         if (matcher.matches(categoryName, asciiPattern)) {
-                            categoryIdName = categoryName.replaceAll(" ", URL_HYPHEN);
+                            categoryIdName = categoryName.replace(" ", URL_HYPHEN);
                             categoryNameId = categoryIdName + URL_HYPHEN
-                                    + categoryId.trim().replaceAll(" ", URL_HYPHEN);
+                                    + categoryId.trim().replace(" ", URL_HYPHEN);
                         } else {
-                            categoryIdName = categoryId.trim().replaceAll(" ", URL_HYPHEN);
+                            categoryIdName = categoryId.trim().replace(" ", URL_HYPHEN);
                             categoryNameId = categoryIdName;
                         }
                     } else {
@@ -220,14 +220,14 @@ public class CatalogUrlSeoTransform implements TemplateTransformModel {
                                 && UtilValidate.isNotEmpty(alternativeUrl.toString())) {
                             categoryIdName = SeoUrlUtil.replaceSpecialCharsUrl(alternativeUrl.toString());
                             categoryNameId = categoryIdName + URL_HYPHEN
-                                    + categoryId.trim().replaceAll(" ", URL_HYPHEN);
+                                    + categoryId.trim().replace(" ", URL_HYPHEN);
                         } else {
-                            categoryNameId = categoryId.trim().replaceAll(" ", URL_HYPHEN);
+                            categoryNameId = categoryId.trim().replace(" ", URL_HYPHEN);
                             categoryIdName = categoryNameId;
                         }
                     }
                     if (categoryNameIdMap.containsKey(categoryNameId)) {
-                        categoryNameId = categoryId.trim().replaceAll(" ", URL_HYPHEN);
+                        categoryNameId = categoryId.trim().replace(" ", URL_HYPHEN);
                         categoryIdName = categoryNameId;
                     }
                     if (!matcher.matches(categoryNameId, asciiPattern)
@@ -362,9 +362,9 @@ public class CatalogUrlSeoTransform implements TemplateTransformModel {
                     if (UtilValidate.isNotEmpty(categoryName)) {
                         urlBuilder.append(categoryName);
                         urlBuilder.append(URL_HYPHEN);
-                        urlBuilder.append(lastCategoryId.trim().replaceAll(" ", URL_HYPHEN));
+                        urlBuilder.append(lastCategoryId.trim().replace(" ", URL_HYPHEN));
                     } else {
-                        urlBuilder.append(lastCategoryId.trim().replaceAll(" ", URL_HYPHEN));
+                        urlBuilder.append(lastCategoryId.trim().replace(" ", URL_HYPHEN));
                     }
                 }
             }
@@ -480,7 +480,7 @@ public class CatalogUrlSeoTransform implements TemplateTransformModel {
         Perl5Matcher matcher = new Perl5Matcher();
         String niceName = null;
         if (UtilValidate.isNotEmpty(name)) {
-            name = name.trim().replaceAll(" ", URL_HYPHEN);
+            name = name.trim().replace(" ", URL_HYPHEN);
             if (UtilValidate.isNotEmpty(name) && matcher.matches(name, asciiPattern)) {
                 niceName = name;
             }
@@ -816,9 +816,9 @@ public class CatalogUrlSeoTransform implements TemplateTransformModel {
                     if (UtilValidate.isNotEmpty(categoryName)) {
                         urlBuilder.append(categoryName);
                         urlBuilder.append(URL_HYPHEN);
-                        urlBuilder.append(lastCategoryId.trim().replaceAll(" ", URL_HYPHEN));
+                        urlBuilder.append(lastCategoryId.trim().replace(" ", URL_HYPHEN));
                     } else {
-                        urlBuilder.append(lastCategoryId.trim().replaceAll(" ", URL_HYPHEN));
+                        urlBuilder.append(lastCategoryId.trim().replace(" ", URL_HYPHEN));
                     }
                 }
             }
diff --git a/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java b/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java
index d838b9948e..0a76169b5c 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/FileUtil.java
@@ -151,7 +151,7 @@ public final class FileUtil {
     private static String getPatchedFileName(String path, String fileName) throws IOException {
         // make sure the export directory exists
         if (UtilValidate.isNotEmpty(path)) {
-            path = path.replaceAll("\\\\", "/");
+            path = path.replace("\\\\", "/");
             File parentDir = new File(path);
             if (!parentDir.exists()) {
                 if (!parentDir.mkdir()) {
diff --git a/framework/base/src/main/java/org/apache/ofbiz/base/util/HttpClient.java b/framework/base/src/main/java/org/apache/ofbiz/base/util/HttpClient.java
index 2e316f9612..7682a3f595 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/HttpClient.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/HttpClient.java
@@ -402,7 +402,7 @@ public class HttpClient {
                 }
 
                 if (charset != null) {
-                    charset = charset.trim().replaceAll("\"", "");
+                    charset = charset.trim().replace("\"", "");
                 }
                 if (Debug.verboseOn() || debug) {
                     Debug.logVerbose("Getting text from HttpClient with charset: " + charset, MODULE);
diff --git a/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java b/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java
index 2a1f7f5c93..6075240bf0 100755
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/KeyStoreUtil.java
@@ -136,12 +136,12 @@ public final class KeyStoreUtil {
     static Map<String, String> getX500Map(Principal x500) {
         Map<String, String> x500Map = new HashMap<>();
 
-        String name = x500.getName().replaceAll("\\\\,", "&com;");
+        String name = x500.getName().replace("\\\\,", "&com;");
         String[] x500Opts = name.split("\\,");
         for (String opt: x500Opts) {
             if (opt.indexOf("=") > -1) {
                 String[] nv = opt.split("\\=", 2);
-                x500Map.put(nv[0].replaceAll("&com;", ","), nv[1].replaceAll("&com;", ","));
+                x500Map.put(nv[0].replace("&com;", ","), nv[1].replace("&com;", ","));
             }
         }
 
diff --git a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilFormatOut.java b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilFormatOut.java
index 9114fd62bc..4dcd946453 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilFormatOut.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilFormatOut.java
@@ -568,7 +568,7 @@ public final class UtilFormatOut {
         return newString.toString();
     }
     public static String makeSqlSafe(String unsafeString) {
-        return unsafeString.replaceAll("'", "''");
+        return unsafeString.replace("'", "''");
     }
 
     public static String formatPrintableCreditCard(String original) {
diff --git a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
index 4ae10c04ca..55358a970d 100644
--- a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
+++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java
@@ -764,7 +764,7 @@ public final class UtilHttp {
         }
         // When you set a mountpoint which contains a slash inside its name (ie not only a slash as a trailer, which is possible),
         // as it's needed with OFBIZ-10765, OFBiz tries to create a cookie with a slash in its name and that's impossible.
-        return appName.replaceAll("/", "_");
+        return appName.replace("/", "_");
     }
 
     public static void setInitialRequestInfo(HttpServletRequest request) {
@@ -1205,7 +1205,7 @@ public final class UtilHttp {
     }
 
     public static String encodeBlanks(String htmlString) {
-        return htmlString.replaceAll(" ", "%20");
+        return htmlString.replace(" ", "%20");
     }
 
     public static String setResponseBrowserProxyNoCache(HttpServletRequest request, HttpServletResponse response) {
diff --git a/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java b/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java
index 0940e37969..68ef797e97 100644
--- a/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java
+++ b/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java
@@ -477,7 +477,7 @@ public class CommonEvents {
                     String platformSpecificPath = sourceFileUrl.getFile();
                     // ensure file separator in location is correct
                     if (!platformSpecificPath.contains(File.separator) && "\\".equals(File.separator)) {
-                        platformSpecificPath = platformSpecificPath.replaceAll("/", "\\\\");
+                        platformSpecificPath = platformSpecificPath.replace("/", "\\\\");
                     }
                     // get line number
                     int lineNumber = 1;
diff --git a/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java b/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java
index b43951deef..d261671260 100644
--- a/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java
+++ b/framework/entity/src/main/java/org/apache/ofbiz/entity/condition/EntityOperator.java
@@ -68,8 +68,8 @@ public abstract class EntityOperator<L, R> implements Serializable {
 
     public static <L, R> void register(String name, EntityOperator<L, R> operator) {
         registerCase(name, operator);
-        registerCase(name.replaceAll("-", "_"), operator);
-        registerCase(name.replaceAll("_", "-"), operator);
+        registerCase(name.replace("-", "_"), operator);
+        registerCase(name.replace("_", "-"), operator);
     }
 
     public static <L, R> EntityOperator<L, R> lookup(String name) {
diff --git a/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java b/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java
index 4166ddaced..316cd33c07 100644
--- a/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java
+++ b/framework/entity/src/main/java/org/apache/ofbiz/entity/jdbc/SqlJdbcUtil.java
@@ -950,7 +950,7 @@ public final class SqlJdbcUtil {
         } else {
             buffer.append('\'');
             if (value instanceof String) {
-                buffer.append(((String) value).replaceAll("'", "''"));
+                buffer.append(((String) value).replace("'", "''"));
             } else {
                 buffer.append(value);
             }
diff --git a/framework/security/src/main/java/org/apache/ofbiz/security/CsrfUtil.java b/framework/security/src/main/java/org/apache/ofbiz/security/CsrfUtil.java
index c834fb4901..438f8f2411 100644
--- a/framework/security/src/main/java/org/apache/ofbiz/security/CsrfUtil.java
+++ b/framework/security/src/main/java/org/apache/ofbiz/security/CsrfUtil.java
@@ -181,7 +181,7 @@ public final class CsrfUtil {
         }
 
         if (pathOrRequestUri.contains("&#x2f;")) {
-            pathOrRequestUri = pathOrRequestUri.replaceAll("&#x2f;", "/");
+            pathOrRequestUri = pathOrRequestUri.replace("&#x2f;", "/");
         }
 
         String requestUri = getRequestUriWithSubFolderLimit(getRequestUriFromPath(pathOrRequestUri));
diff --git a/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java b/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java
index f0c9875641..6e6b0c8463 100644
--- a/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java
+++ b/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java
@@ -146,7 +146,7 @@ public class SecuredUpload {
                 // More about that: https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation
                 if (fileToCheck.length() > 259) {
                     Debug.logError("Uploaded file name too long", MODULE);
-                } else if (p.toString().contains(imageServerUrl.replaceAll("/", "\\\\"))) {
+                } else if (p.toString().contains(imageServerUrl.replace("/", "\\\\"))) {
                     // TODO check this is still useful in at least 1 case
                     if (fileName.matches("[a-zA-Z0-9-_ ()]{1,249}.[a-zA-Z0-9-_ ]{1,10}")) { // "(" and ")" for duplicates files
                         wrongFile = false;
diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/LoginWorker.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/LoginWorker.java
index 5af41248a2..d20d68e93c 100644
--- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/LoginWorker.java
+++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/LoginWorker.java
@@ -1243,7 +1243,7 @@ public final class LoginWorker {
                         Map<String, String> x500Map = KeyStoreUtil.getCertX500Map(clientCerts[i]);
                         if (i == 0) {
                             String cn = x500Map.get("CN");
-                            cn = cn.replaceAll("\\\\", "");
+                            cn = cn.replace("\\\\", "");
                             Matcher m = pattern.matcher(cn);
                             if (m.matches()) {
                                 userLoginId = m.group(1);
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java
index 858c3a6b76..71bd8278e5 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java
@@ -336,7 +336,7 @@ public final class WidgetWorker {
     public static Map<String, Object> resolveParametersMapFromQueryString(Map<String, Object> context) {
         String qbeString = (String) context.get("_QBESTRING_");
         return qbeString != null
-                ? UtilHttp.getQueryStringOnlyParameterMap(qbeString.replaceAll("&amp;", "&"))
+                ? UtilHttp.getQueryStringOnlyParameterMap(qbeString.replace("&amp;", "&"))
                 : null;
     }
 }
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelActionUtil.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelActionUtil.java
index 15d3d4a923..211d63bb46 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelActionUtil.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelActionUtil.java
@@ -38,7 +38,7 @@ public class ModelActionUtil {
             context.put("queryString", queryString);
             context.put("queryStringMap", result.get("queryStringMap"));
             if (UtilValidate.isNotEmpty(queryString)) {
-                String queryStringEncoded = queryString.replaceAll("&", "%26");
+                String queryStringEncoded = queryString.replace("&", "%26");
                 context.put("queryStringEncoded", queryStringEncoded);
             }
         } else {
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java
index 0b14bc0cb7..7e4143582a 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java
@@ -1771,7 +1771,7 @@ public final class ModelFormField {
             if (UtilValidate.isEmpty(retVal)) {
                 retVal = this.getDefaultValue(context);
             } else if ("currency".equals(type)) {
-                retVal = retVal.replaceAll("&nbsp;", " ");
+                retVal = retVal.replace("&nbsp;", " ");
                 // FIXME : encoding currency is a problem for some locale, we should not have any &nbsp; in retVal other case may arise in future...
                 Locale locale = (Locale) context.get("locale");
                 if (locale == null) {
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlWidgetRenderer.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlWidgetRenderer.java
index a112ed020b..0c707bb99f 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlWidgetRenderer.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/html/HtmlWidgetRenderer.java
@@ -95,7 +95,7 @@ public class HtmlWidgetRenderer {
             switch (NAMED_BORDER_TYPE) {
             case SOURCE:
                 return "<div class='info-container'><span class='info-overlay-item info-cursor-none info-"
-                        + widgetType.toLowerCase().replaceAll(" ", "-") + "' data-source='"
+                        + widgetType.toLowerCase().replace(" ", "-") + "' data-source='"
                         + location + "' data-target='" + contextPath
                         + (SeoConfigUtil.isCategoryUrlEnabled(contextPath) ? "" : "/control")
                         + "/openSourceFile'>"
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
index dabc2d32d3..3e4e88dddf 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
@@ -135,7 +135,7 @@ public final class MacroFormRenderer implements FormStringRenderer {
     }
 
     private static String encodeDoubleQuotes(String htmlString) {
-        return htmlString.replaceAll("\"", "\\\\\"");
+        return htmlString.replace("\"", "\\\\\"");
     }
 
     public boolean getRenderPagination() {
@@ -715,8 +715,7 @@ public final class MacroFormRenderer implements FormStringRenderer {
             if (textSize > 0 && description.length() > textSize) {
                 description = description.substring(0, textSize - 8) + "..." + description.substring(description.length() - 5);
             }
-            options.append(encode(description.replaceAll("'", "\\\\\'"), modelFormField, context));
-            // replaceAll("'", "\\\\\'") related to OFBIZ-6504
+            options.append(encode(description.replaceAll("'", "\\\\\'"), modelFormField, context)); // related to OFBIZ-6504
 
             if (UtilValidate.isNotEmpty(currentValueList)) {
                 options.append("'");
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroTreeRenderer.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroTreeRenderer.java
index 8871e25624..53a0ab39bc 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroTreeRenderer.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroTreeRenderer.java
@@ -292,7 +292,7 @@ public class MacroTreeRenderer implements TreeStringRenderer {
         sr.append("\" linkText=\"");
         sr.append(linkText);
         sr.append("\" imgStr=\"");
-        sr.append(imgStr.replaceAll("\"", "\\\\\""));
+        sr.append(imgStr.replace("\"", "\\\\\""));
         sr.append("\" />");
         executeMacro(sr.toString().replace("|", "%7C")); // Fix for OFBIZ-9191
     }