From d29263ef570efe566b3bd5b944302beafd0b2b6a Mon Sep 17 00:00:00 2001 From: nitram84 Date: Sat, 6 May 2023 15:37:28 +0200 Subject: [PATCH] fix(res): fix escaping for string arrays --- .../main/java/jadx/core/xmlgen/ResXmlGen.java | 2 +- .../java/jadx/core/xmlgen/ResXmlGenTest.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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 5d8556f2c..dcf43c876 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/ResXmlGen.java @@ -243,7 +243,7 @@ public class ResXmlGen { cw.add(" />"); } else { cw.add('>'); - if (itemTag.equals("string")) { + if (itemTag.equals("string") || (typeName.equals("array") && valueStr.charAt(0) != '@')) { cw.add(StringUtils.escapeResStrValue(valueStr)); } else { cw.add(StringUtils.escapeResValue(valueStr)); diff --git a/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java b/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java index 74e921fa4..1e3cb0e46 100644 --- a/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java +++ b/jadx-core/src/test/java/jadx/core/xmlgen/ResXmlGenTest.java @@ -125,4 +125,26 @@ class ResXmlGenTest { + " Jadx Decompiler App\n" + "", files.get(0).getText().toString()); } + + @Test + void testArrayEscape() { + ResourceStorage resStorage = new ResourceStorage(); + ResourceEntry re = new ResourceEntry(2130903103, "jadx.gui.app", "array", "single_quote_escape_sample", ""); + re.setNamedValues( + Lists.list(new RawNamedValue(16777216, new RawValue(3, 0)))); + resStorage.add(re); + + ValuesParser vp = new ValuesParser(new String[] { "Let's go" }, resStorage.getResourcesNames()); + ResXmlGen resXmlGen = new ResXmlGen(resStorage, vp); + List files = resXmlGen.makeResourcesXml(); + + assertEquals(1, files.size()); + assertEquals("res/values/arrays.xml", files.get(0).getFileName()); + assertEquals("\n" + + "\n" + + " \n" + + " Let\\'s go\n" + + " \n" + + "", files.get(0).getText().toString()); + } }