From f91c5d3647473ef7eaf2a40bf67887e0c31db595 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 11 Mar 2018 19:19:06 +0300 Subject: [PATCH] res: skip padding on file end (#225) --- .../java/jadx/core/xmlgen/BinaryXMLParser.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java index d15dd77a2..cd430155a 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/BinaryXMLParser.java @@ -48,6 +48,7 @@ public class BinaryXMLParser extends CommonBinaryParser { private ValuesParser valuesParser; private boolean isLastEnd = true; private boolean isOneLine = true; + private int namespaceDepth = 0; private int[] resourceIds; public BinaryXMLParser(RootNode root) { @@ -136,6 +137,10 @@ public class BinaryXMLParser extends CommonBinaryParser { break; default: + if (namespaceDepth == 0) { + // skip padding on file end + return; + } die("Type: 0x" + Integer.toHexString(type) + " not yet implemented"); break; } @@ -166,6 +171,7 @@ public class BinaryXMLParser extends CommonBinaryParser { int beginPrefix = is.readInt32(); int beginURI = is.readInt32(); nsMap.computeIfAbsent(getString(beginURI), k -> getString(beginPrefix)); + namespaceDepth++; } private void parseNameSpaceEnd() throws IOException { @@ -179,6 +185,7 @@ public class BinaryXMLParser extends CommonBinaryParser { int comment = is.readInt32(); int endPrefix = is.readInt32(); int endURI = is.readInt32(); + namespaceDepth--; nsMap.computeIfAbsent(getString(endURI), k -> getString(endPrefix)); } @@ -381,8 +388,9 @@ public class BinaryXMLParser extends CommonBinaryParser { int endLineNumber = is.readInt32(); int comment = is.readInt32(); int elementNS = is.readInt32(); - int elementName = is.readInt32(); - if (currentTag.equals(getString(elementName)) && isOneLine && !isLastEnd) { + int elementNameId = is.readInt32(); + String elemName = getString(elementNameId); + if (currentTag.equals(elemName) && isOneLine && !isLastEnd) { writer.add("/>"); } else { writer.startLine(""); + writer.add(elemName).add(">"); } isLastEnd = true; if (writer.getIndent() != 0) {