mirror of
https://github.com/revanced/Apktool.git
synced 2024-12-11 21:37:47 +01:00
fix: support duplicated namespaces (#3233)
This commit is contained in:
parent
33ca2929c9
commit
57ef8a205a
@ -19,7 +19,9 @@ package org.xmlpull.renamed;
|
|||||||
import org.xmlpull.v1.XmlSerializer;
|
import org.xmlpull.v1.XmlSerializer;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of XmlSerializer interface from XmlPull V1 API. This
|
* Implementation of XmlSerializer interface from XmlPull V1 API. This
|
||||||
@ -646,14 +648,24 @@ public class MXSerializer implements XmlSerializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void writeNamespaceDeclarations() throws IOException {
|
protected void writeNamespaceDeclarations() throws IOException {
|
||||||
|
Set<String> uniqueNamespaces = new HashSet<>();
|
||||||
for (int i = elNamespaceCount[depth - 1]; i < namespaceEnd; i++) {
|
for (int i = elNamespaceCount[depth - 1]; i < namespaceEnd; i++) {
|
||||||
if (doIndent && namespaceUri[i].length() > 40) {
|
String prefix = namespacePrefix[i];
|
||||||
|
String uri = namespaceUri[i];
|
||||||
|
|
||||||
|
// Some applications as seen in #2664 have duplicated namespaces.
|
||||||
|
// AOSP doesn't care, but the parser does. So we filter them out.
|
||||||
|
if (uniqueNamespaces.contains(prefix + uri)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (doIndent && uri.length() > 40) {
|
||||||
writeIndent();
|
writeIndent();
|
||||||
out.write(" ");
|
out.write(" ");
|
||||||
}
|
}
|
||||||
if (namespacePrefix[i] != "") {
|
if (prefix != "") {
|
||||||
out.write(" xmlns:");
|
out.write(" xmlns:");
|
||||||
out.write(namespacePrefix[i]);
|
out.write(prefix);
|
||||||
out.write('=');
|
out.write('=');
|
||||||
} else {
|
} else {
|
||||||
out.write(" xmlns=");
|
out.write(" xmlns=");
|
||||||
@ -661,8 +673,10 @@ public class MXSerializer implements XmlSerializer {
|
|||||||
out.write(attributeUseApostrophe ? '\'' : '"');
|
out.write(attributeUseApostrophe ? '\'' : '"');
|
||||||
|
|
||||||
// NOTE: escaping of namespace value the same way as attributes!!!!
|
// NOTE: escaping of namespace value the same way as attributes!!!!
|
||||||
writeAttributeValue(namespaceUri[i], out);
|
writeAttributeValue(uri, out);
|
||||||
out.write(attributeUseApostrophe ? '\'' : '"');
|
out.write(attributeUseApostrophe ? '\'' : '"');
|
||||||
|
|
||||||
|
uniqueNamespaces.add(prefix + uri);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user