From 8f6f59cc6611a2e05a8561b6d1255d8a38edfaf7 Mon Sep 17 00:00:00 2001 From: Albert Gorski Date: Wed, 21 Sep 2016 09:42:20 -0400 Subject: [PATCH] Close all smali files after it is finished writing to them. This is important for instances where smali is invoked through the run method instead of main. --- smali/src/main/java/org/jf/smali/main.java | 91 +++++++++++----------- 1 file changed, 47 insertions(+), 44 deletions(-) mode change 100644 => 100755 smali/src/main/java/org/jf/smali/main.java diff --git a/smali/src/main/java/org/jf/smali/main.java b/smali/src/main/java/org/jf/smali/main.java old mode 100644 new mode 100755 index e5562808..46ad1369 --- a/smali/src/main/java/org/jf/smali/main.java +++ b/smali/src/main/java/org/jf/smali/main.java @@ -308,60 +308,63 @@ public class main { private static boolean assembleSmaliFile(File smaliFile, DexBuilder dexBuilder, SmaliOptions options) throws Exception { - CommonTokenStream tokens; + FileInputStream fis = null; - LexerErrorInterface lexer; + try { + fis = new FileInputStream(smaliFile); + InputStreamReader reader = new InputStreamReader(fis, "UTF-8"); - FileInputStream fis = new FileInputStream(smaliFile); - InputStreamReader reader = new InputStreamReader(fis, "UTF-8"); + LexerErrorInterface lexer = new smaliFlexLexer(reader); + ((smaliFlexLexer)lexer).setSourceFile(smaliFile); + CommonTokenStream tokens = new CommonTokenStream((TokenSource)lexer); - lexer = new smaliFlexLexer(reader); - ((smaliFlexLexer)lexer).setSourceFile(smaliFile); - tokens = new CommonTokenStream((TokenSource)lexer); + if (options.printTokens) { + tokens.getTokens(); - if (options.printTokens) { - tokens.getTokens(); + for (int i=0; i 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, options.experimental); + + 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.allowOdex); - parser.setApiLevel(options.apiLevel, options.experimental); - - 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, options.experimental); - - dexGen.setVerboseErrors(options.verboseErrors); - dexGen.setDexBuilder(dexBuilder); - dexGen.smali_file(); - - return dexGen.getNumberOfSyntaxErrors() == 0; }