Bug 1261965 - Correct leak FileOutputStream in FilePickerResultHandler. r=grisha
MozReview-Commit-ID: 6gfRS4SPM8E
--- a/mobile/android/base/java/org/mozilla/gecko/FilePickerResultHandler.java
+++ b/mobile/android/base/java/org/mozilla/gecko/FilePickerResultHandler.java
@@ -210,21 +210,22 @@ class FilePickerResultHandler implements
String mimeType = cr.getType(uri);
fileExt = "." + GeckoAppShell.getExtensionFromMimeType(mimeType);
} else {
fileExt = name.substring(period);
fileName += name.substring(0, period);
}
// Now write the data to the temp file
+ FileOutputStream fos = null;
try {
cacheDir.mkdir();
File file = File.createTempFile(fileName, fileExt, cacheDir);
- FileOutputStream fos = new FileOutputStream(file);
+ fos = new FileOutputStream(file);
InputStream is = cr.openInputStream(uri);
byte[] buf = new byte[4096];
int len = is.read(buf);
while (len != -1) {
fos.write(buf, 0, len);
len = is.read(buf);
}
fos.close();
@@ -232,16 +233,22 @@ class FilePickerResultHandler implements
tempFile = file.getAbsolutePath();
sendResult((tempFile == null) ? "" : tempFile);
if (tabId > -1 && !TextUtils.isEmpty(tempFile)) {
Tabs.registerOnTabsChangedListener(this);
}
} catch(IOException ex) {
Log.i(LOGTAG, "Error writing file", ex);
+ } finally {
+ if (fos != null) {
+ try {
+ fos.close();
+ } catch (IOException e) { /* not much to do here */ }
+ }
}
} else {
sendResult("");
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) { }