CrackMe.apk
Download file
package org.apache.commons.io.output;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.input.XmlStreamReader;
public class XmlStreamWriter extends Writer {
private static final int BUFFER_SIZE = 4096;
static final Pattern ENCODING_PATTERN = XmlStreamReader.ENCODING_PATTERN;
private final String defaultEncoding;
private String encoding;
private final OutputStream out;
private Writer writer;
private StringWriter xmlPrologWriter;
public XmlStreamWriter(OutputStream outputStream) {
this(outputStream, (String) null);
}
public XmlStreamWriter(OutputStream outputStream, String str) {
this.xmlPrologWriter = new StringWriter(4096);
this.out = outputStream;
this.defaultEncoding = str == null ? "UTF-8" : str;
}
public XmlStreamWriter(File file) throws FileNotFoundException {
this(file, (String) null);
}
public XmlStreamWriter(File file, String str) throws FileNotFoundException {
this((OutputStream) new FileOutputStream(file), str);
}
public String getEncoding() {
return this.encoding;
}
public String getDefaultEncoding() {
return this.defaultEncoding;
}
public void close() throws IOException {
if (this.writer == null) {
this.encoding = this.defaultEncoding;
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(this.out, this.encoding);
this.writer = outputStreamWriter;
outputStreamWriter.write(this.xmlPrologWriter.toString());
}
this.writer.close();
}
public void flush() throws IOException {
Writer writer2 = this.writer;
if (writer2 != null) {
writer2.flush();
}
}
private void detectEncoding(char[] cArr, int i, int i2) throws IOException {
StringBuffer buffer = this.xmlPrologWriter.getBuffer();
int length = buffer.length() + i2 > 4096 ? 4096 - buffer.length() : i2;
this.xmlPrologWriter.write(cArr, i, length);
if (buffer.length() >= 5) {
if (buffer.substring(0, 5).equals("<?xml")) {
int indexOf = buffer.indexOf("?>");
if (indexOf > 0) {
Matcher matcher = ENCODING_PATTERN.matcher(buffer.substring(0, indexOf));
if (matcher.find()) {
String upperCase = matcher.group(1).toUpperCase();
this.encoding = upperCase;
this.encoding = upperCase.substring(1, upperCase.length() - 1);
} else {
this.encoding = this.defaultEncoding;
}
} else if (buffer.length() >= 4096) {
this.encoding = this.defaultEncoding;
}
} else {
this.encoding = this.defaultEncoding;
}
if (this.encoding != null) {
this.xmlPrologWriter = null;
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(this.out, this.encoding);
this.writer = outputStreamWriter;
outputStreamWriter.write(buffer.toString());
if (i2 > length) {
this.writer.write(cArr, i + length, i2 - length);
}
}
}
}
public void write(char[] cArr, int i, int i2) throws IOException {
if (this.xmlPrologWriter != null) {
detectEncoding(cArr, i, i2);
} else {
this.writer.write(cArr, i, i2);
}
}
}
Download file