From ed02a9781a006b0368f3f7c5c289e43896ddc469 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Sun, 23 Apr 2017 12:44:03 +0200 Subject: [PATCH] Fix a cursor not being closed Still won't be the cause for #655 --- .../gadgetbridge/util/UriHelper.java | 37 +++++++++++-------- .../gadgetbridge/test/Tryout.java | 2 + 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/UriHelper.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/UriHelper.java index e486d276b..d9387cf87 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/UriHelper.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/UriHelper.java @@ -79,6 +79,7 @@ public class UriHelper { * Opens a stream to read the contents of the uri. * Note: the caller has to close the stream after usage. * Every invocation of this method will open a new stream. + * FIXME: make sure that every caller actually closes the returned stream! * @throws FileNotFoundException */ @NonNull @@ -127,27 +128,31 @@ public class UriHelper { if (cursor == null) { throw new IOException("Unable to query metadata for: " + uri); } - if (cursor.moveToFirst()) { - int name_index = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME); - if (name_index == -1) { - throw new IOException("Unable to retrieve name for: " + uri); - } - int size_index = cursor.getColumnIndex(MediaStore.MediaColumns.SIZE); - if (size_index == -1) { - throw new IOException("Unable to retrieve size for: " + uri); - } - try { - fileName = cursor.getString(name_index); - if (fileName == null) { + try { + if (cursor.moveToFirst()) { + int name_index = cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME); + if (name_index == -1) { throw new IOException("Unable to retrieve name for: " + uri); } - fileSize = cursor.getLong(size_index); - if (fileSize < 0) { + int size_index = cursor.getColumnIndex(MediaStore.MediaColumns.SIZE); + if (size_index == -1) { throw new IOException("Unable to retrieve size for: " + uri); } - } catch (Exception ex) { - throw new IOException("Unable to retrieve metadata for: " + uri + ": " + ex.getMessage()); + try { + fileName = cursor.getString(name_index); + if (fileName == null) { + throw new IOException("Unable to retrieve name for: " + uri); + } + fileSize = cursor.getLong(size_index); + if (fileSize < 0) { + throw new IOException("Unable to retrieve size for: " + uri); + } + } catch (Exception ex) { + throw new IOException("Unable to retrieve metadata for: " + uri + ": " + ex.getMessage()); + } } + } finally { + cursor.close(); } } else if (ContentResolver.SCHEME_FILE.equals(uriScheme)) { file = new File(uri.getPath()); diff --git a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/Tryout.java b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/Tryout.java index af346b139..17a720b69 100644 --- a/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/Tryout.java +++ b/app/src/test/java/nodomain/freeyourgadget/gadgetbridge/test/Tryout.java @@ -32,4 +32,6 @@ public class Tryout extends TestBase { LOG.info("Calender: " + DateTimeUtils.formatDateTime(calendar.getTime())); Logging.logBytes(LOG, bytes); } + + }