fix(res): fix escaping for string arrays

This commit is contained in:
nitram84
2023-05-06 15:37:28 +02:00
committed by skylot
parent d8c8fb4e18
commit d29263ef57
2 changed files with 23 additions and 1 deletions
@@ -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));
@@ -125,4 +125,26 @@ class ResXmlGenTest {
+ " <string name=\"app_name\">Jadx Decompiler App</string>\n"
+ "</resources>", 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<ResContainer> files = resXmlGen.makeResourcesXml();
assertEquals(1, files.size());
assertEquals("res/values/arrays.xml", files.get(0).getFileName());
assertEquals("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ "<resources>\n"
+ " <array name=\"single_quote_escape_sample\">\n"
+ " <item>Let\\'s go</item>\n"
+ " </array>\n"
+ "</resources>", files.get(0).getText().toString());
}
}