From 45a1de1a081f569745c95d03e9d3b9f45fc46e90 Mon Sep 17 00:00:00 2001 From: REAndroid Date: Wed, 3 May 2023 20:09:51 +0200 Subject: [PATCH] fix: escaping xml characters --- .../apk/xmldecoder/DecoderTableEntry.java | 6 ----- .../apk/xmldecoder/XMLDecodeHelper.java | 24 +++++-------------- 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/reandroid/apk/xmldecoder/DecoderTableEntry.java b/src/main/java/com/reandroid/apk/xmldecoder/DecoderTableEntry.java index dc5068e..f316396 100644 --- a/src/main/java/com/reandroid/apk/xmldecoder/DecoderTableEntry.java +++ b/src/main/java/com/reandroid/apk/xmldecoder/DecoderTableEntry.java @@ -45,12 +45,6 @@ abstract class DecoderTableEntry, OUTPUT> { packageBlock, valueItem.getValueType(), valueItem.getData()); - - value = XMLDecodeHelper.escapeXmlChars(value); - if(value == null){ - System.err.println("\nNULL: " + valueItem); - } - writer.text(value); } } diff --git a/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java b/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java index ca2831d..c806325 100644 --- a/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java +++ b/src/main/java/com/reandroid/apk/xmldecoder/XMLDecodeHelper.java @@ -15,6 +15,7 @@ */ package com.reandroid.apk.xmldecoder; +import com.reandroid.arsc.decoder.ValueDecoder; import com.reandroid.arsc.item.StringItem; import com.reandroid.xml.*; import com.reandroid.xml.parser.XMLSpanParser; @@ -28,7 +29,7 @@ public class XMLDecodeHelper { return; } if(!stringItem.hasStyle()){ - writer.text(escapeXmlChars(stringItem.get())); + writer.text(ValueDecoder.escapeSpecialCharacter(stringItem.get())); }else { String xml = stringItem.getXml(); XMLElement element = parseSpanSafe(xml); @@ -43,11 +44,13 @@ public class XMLDecodeHelper { public static void writeElement(EntryWriter writer, XMLElement element) throws IOException { writer.startTag(element.getTagName()); for(XMLAttribute xmlAttribute : element.listAttributes()){ - writer.attribute(xmlAttribute.getName(), xmlAttribute.getValue()); + writer.attribute(xmlAttribute.getName(), + ValueDecoder.escapeSpecialCharacter(xmlAttribute.getValue())); } for(XMLNode xmlNode : element.getChildNodes()){ if(xmlNode instanceof XMLText){ - writer.text(((XMLText)xmlNode).getText(false)); + String text = ((XMLText)xmlNode).getText(false); + writer.text(ValueDecoder.escapeSpecialCharacter(text)); }else if(xmlNode instanceof XMLElement){ writeElement(writer, (XMLElement) xmlNode); } @@ -65,20 +68,5 @@ public class XMLDecodeHelper { return null; } } - public static String escapeXmlChars(String str){ - if(str == null){ - return null; - } - if(str.indexOf('&') < 0 && str.indexOf('<') < 0 && str.indexOf('>') < 0){ - return str; - } - str=str.replaceAll("&", "&"); - str=str.replaceAll("<", "<"); - str=str.replaceAll(">", ">"); - str=str.replaceAll("&", "&"); - str=str.replaceAll("<", "<"); - str=str.replaceAll(">", ">"); - return str; - } }