mirror of
https://github.com/revanced/smali.git
synced 2025-04-29 22:24:26 +02:00
Ensure all smali files are closed after the writing is complete
This makes sure that all smali files are closed after writing to them by surrounding the writer code with a try/finally block that closes the output stream once the writing has completed or when an exception occurs.
This commit is contained in:
parent
e75f2b230a
commit
43669ecc6e
@ -147,59 +147,62 @@ public class Smali {
|
|||||||
|
|
||||||
private static boolean assembleSmaliFile(File smaliFile, DexBuilder dexBuilder, SmaliOptions options)
|
private static boolean assembleSmaliFile(File smaliFile, DexBuilder dexBuilder, SmaliOptions options)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
CommonTokenStream tokens;
|
FileInputStream fis = null;
|
||||||
|
try {
|
||||||
|
fis = new FileInputStream(smaliFile);
|
||||||
|
InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
|
||||||
|
|
||||||
LexerErrorInterface lexer;
|
LexerErrorInterface lexer = new smaliFlexLexer(reader);
|
||||||
|
((smaliFlexLexer)lexer).setSourceFile(smaliFile);
|
||||||
|
CommonTokenStream tokens = new CommonTokenStream((TokenSource)lexer);
|
||||||
|
|
||||||
FileInputStream fis = new FileInputStream(smaliFile);
|
if (options.printTokens) {
|
||||||
InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
|
tokens.getTokens();
|
||||||
|
|
||||||
lexer = new smaliFlexLexer(reader);
|
for (int i=0; i<tokens.size(); i++) {
|
||||||
((smaliFlexLexer)lexer).setSourceFile(smaliFile);
|
Token token = tokens.get(i);
|
||||||
tokens = new CommonTokenStream((TokenSource)lexer);
|
if (token.getChannel() == smaliParser.HIDDEN) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (options.printTokens) {
|
System.out.println(smaliParser.tokenNames[token.getType()] + ": " + token.getText());
|
||||||
tokens.getTokens();
|
|
||||||
|
|
||||||
for (int i=0; i<tokens.size(); i++) {
|
|
||||||
Token token = tokens.get(i);
|
|
||||||
if (token.getChannel() == smaliParser.HIDDEN) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println(smaliParser.tokenNames[token.getType()] + ": " + token.getText());
|
System.out.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.flush();
|
smaliParser parser = new smaliParser(tokens);
|
||||||
|
parser.setVerboseErrors(options.verboseErrors);
|
||||||
|
parser.setAllowOdex(options.allowOdexOpcodes);
|
||||||
|
parser.setApiLevel(options.apiLevel);
|
||||||
|
|
||||||
|
smaliParser.smali_file_return result = parser.smali_file();
|
||||||
|
|
||||||
|
if (parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CommonTree t = result.getTree();
|
||||||
|
|
||||||
|
CommonTreeNodeStream treeStream = new CommonTreeNodeStream(t);
|
||||||
|
treeStream.setTokenStream(tokens);
|
||||||
|
|
||||||
|
if (options.printTokens) {
|
||||||
|
System.out.println(t.toStringTree());
|
||||||
|
}
|
||||||
|
|
||||||
|
smaliTreeWalker dexGen = new smaliTreeWalker(treeStream);
|
||||||
|
dexGen.setApiLevel(options.apiLevel);
|
||||||
|
|
||||||
|
dexGen.setVerboseErrors(options.verboseErrors);
|
||||||
|
dexGen.setDexBuilder(dexBuilder);
|
||||||
|
dexGen.smali_file();
|
||||||
|
|
||||||
|
return dexGen.getNumberOfSyntaxErrors() == 0;
|
||||||
|
} finally {
|
||||||
|
if (fis != null) {
|
||||||
|
fis.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
smaliParser parser = new smaliParser(tokens);
|
|
||||||
parser.setVerboseErrors(options.verboseErrors);
|
|
||||||
parser.setAllowOdex(options.allowOdexOpcodes);
|
|
||||||
parser.setApiLevel(options.apiLevel);
|
|
||||||
|
|
||||||
smaliParser.smali_file_return result = parser.smali_file();
|
|
||||||
|
|
||||||
if (parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
CommonTree t = result.getTree();
|
|
||||||
|
|
||||||
CommonTreeNodeStream treeStream = new CommonTreeNodeStream(t);
|
|
||||||
treeStream.setTokenStream(tokens);
|
|
||||||
|
|
||||||
if (options.printTokens) {
|
|
||||||
System.out.println(t.toStringTree());
|
|
||||||
}
|
|
||||||
|
|
||||||
smaliTreeWalker dexGen = new smaliTreeWalker(treeStream);
|
|
||||||
dexGen.setApiLevel(options.apiLevel);
|
|
||||||
|
|
||||||
dexGen.setVerboseErrors(options.verboseErrors);
|
|
||||||
dexGen.setDexBuilder(dexBuilder);
|
|
||||||
dexGen.smali_file();
|
|
||||||
|
|
||||||
return dexGen.getNumberOfSyntaxErrors() == 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user