diff --git a/jadx-core/src/main/java/jadx/core/utils/StringUtils.java b/jadx-core/src/main/java/jadx/core/utils/StringUtils.java index 3385321ed..7ddaffde9 100644 --- a/jadx-core/src/main/java/jadx/core/utils/StringUtils.java +++ b/jadx-core/src/main/java/jadx/core/utils/StringUtils.java @@ -123,4 +123,29 @@ public class StringUtils { } return sb.toString(); } + + public static String escapeResStrValue(String str) { + int len = str.length(); + StringBuilder sb = new StringBuilder(len); + for (int i = 0; i < len; i++) { + char c = str.charAt(i); + switch (c) { + case '&': sb.append("&"); break; + case '<': sb.append("<"); break; + case '>': sb.append(">"); break; + case '"': sb.append("\\\""); break; + case '\'': sb.append("\\'"); break; + + case '\n': sb.append("\\n"); break; + case '\r': sb.append("\\r"); break; + case '\t': sb.append("\\t"); break; + case '\b': sb.append("\\b"); break; + case '\f': sb.append("\\f"); break; + default: + sb.append(c); + break; + } + } + return sb.toString(); + } } diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java index a093321fe..d643931b2 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java @@ -105,7 +105,11 @@ public class ResXmlGen { cw.add(' ').add(attrName).add("=\"").add(attrValue).add('"'); } cw.add('>'); - cw.add(StringUtils.escapeResValue(valueStr)); + if (typeName.equals("string")) { + cw.add(StringUtils.escapeResStrValue(valueStr)); + } else { + cw.add(StringUtils.escapeResValue(valueStr)); + } cw.add("'); }