aboutsummaryrefslogtreecommitdiff
path: root/smali
diff options
context:
space:
mode:
authorAlbert Gorski <sagorski@ncsu.edu>2016-10-09 21:24:05 -0400
committerBen Gruver <bgruv@google.com>2016-10-15 21:12:23 -0700
commit43669ecc6e3f5d95ef1653fb7ba0c0445040fd3c (patch)
tree004fe481af4d5d3b177981f4dbc3de7683c743dc /smali
parente75f2b230a1188ebfeffcb7737dfe94bcc0f9e44 (diff)
downloadsmali-43669ecc6e3f5d95ef1653fb7ba0c0445040fd3c.tar.gz
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.
Diffstat (limited to 'smali')
-rw-r--r--smali/src/main/java/org/jf/smali/Smali.java85
1 files changed, 44 insertions, 41 deletions
diff --git a/smali/src/main/java/org/jf/smali/Smali.java b/smali/src/main/java/org/jf/smali/Smali.java
index f701c5c5..7f3762af 100644
--- a/smali/src/main/java/org/jf/smali/Smali.java
+++ b/smali/src/main/java/org/jf/smali/Smali.java
@@ -147,59 +147,62 @@ public class Smali {
private static boolean assembleSmaliFile(File smaliFile, DexBuilder dexBuilder, SmaliOptions options)
throws Exception {
- CommonTokenStream tokens;
-
- LexerErrorInterface lexer;
-
- FileInputStream fis = new FileInputStream(smaliFile);
- InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
-
- lexer = new smaliFlexLexer(reader);
- ((smaliFlexLexer)lexer).setSourceFile(smaliFile);
- tokens = new CommonTokenStream((TokenSource)lexer);
-
- if (options.printTokens) {
- tokens.getTokens();
+ FileInputStream fis = null;
+ try {
+ 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);
+
+ if (options.printTokens) {
+ tokens.getTokens();
+
+ for (int i=0; i<tokens.size(); i++) {
+ Token token = tokens.get(i);
+ if (token.getChannel() == smaliParser.HIDDEN) {
+ continue;
+ }
- 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.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 parser = new smaliParser(tokens);
+ parser.setVerboseErrors(options.verboseErrors);
+ parser.setAllowOdex(options.allowOdexOpcodes);
+ parser.setApiLevel(options.apiLevel);
- smaliParser.smali_file_return result = parser.smali_file();
+ smaliParser.smali_file_return result = parser.smali_file();
- if (parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) {
- return false;
- }
+ if (parser.getNumberOfSyntaxErrors() > 0 || lexer.getNumberOfSyntaxErrors() > 0) {
+ return false;
+ }
- CommonTree t = result.getTree();
+ CommonTree t = result.getTree();
- CommonTreeNodeStream treeStream = new CommonTreeNodeStream(t);
- treeStream.setTokenStream(tokens);
+ CommonTreeNodeStream treeStream = new CommonTreeNodeStream(t);
+ treeStream.setTokenStream(tokens);
- if (options.printTokens) {
- System.out.println(t.toStringTree());
- }
+ if (options.printTokens) {
+ System.out.println(t.toStringTree());
+ }
- smaliTreeWalker dexGen = new smaliTreeWalker(treeStream);
- dexGen.setApiLevel(options.apiLevel);
+ smaliTreeWalker dexGen = new smaliTreeWalker(treeStream);
+ dexGen.setApiLevel(options.apiLevel);
- dexGen.setVerboseErrors(options.verboseErrors);
- dexGen.setDexBuilder(dexBuilder);
- dexGen.smali_file();
+ dexGen.setVerboseErrors(options.verboseErrors);
+ dexGen.setDexBuilder(dexBuilder);
+ dexGen.smali_file();
- return dexGen.getNumberOfSyntaxErrors() == 0;
+ return dexGen.getNumberOfSyntaxErrors() == 0;
+ } finally {
+ if (fis != null) {
+ fis.close();
+ }
+ }
}
}