You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

250 lines
6.4 KiB

/*
* Copyright (c) 2013 - present Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package codetoanalyze.java.infer;
import android.app.DownloadManager;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.database.CursorWrapper;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.os.RemoteException;
import android.provider.MediaStore;
public class CursorLeaks {
public int cursorClosed(SQLiteDatabase sqLiteDatabase) {
Cursor cursor = sqLiteDatabase.query(
"events", null,
null, null, null, null, null);
try {
return cursor.getCount();
} finally {
cursor.close();
}
}
public Object cursorClosedCheckNull(SQLiteDatabase sqLiteDatabase) {
Cursor cursor = sqLiteDatabase.query(
"events", null,
null, null, null, null, null);
Object value = null;
try {
if (cursor == null) {
return null;
}
value = cursor.getString(0);
} finally {
if (cursor != null) {
cursor.close();
}
}
return value;
}
public int cursorNotClosed(SQLiteDatabase sqLiteDatabase) {
Cursor cursor = sqLiteDatabase.query(
"events", null,
null, null, null, null, null);
return cursor.getCount();
}
Context mContext;
ContentResolver mContentResolver;
public int getImageCountHelperNotClosed(String customClause) {
String[] projection = {"COUNT(*)"};
String selectionClause = selectionClause = customClause;
Cursor cursor = mContext.getContentResolver().query(
null,
projection,
selectionClause,
null,
null);
if (cursor != null) {
int count = cursor.getInt(0);
// cursor.close();
return count;
} else {
return 0;
}
}
public int getImageCountHelperClosed(String customClause) {
String[] projection = {"COUNT(*)"};
String selectionClause = selectionClause = customClause;
Cursor cursor = mContext.getContentResolver().query(
null,
projection,
selectionClause,
null,
null);
if (cursor != null) {
int count = cursor.getInt(0);
cursor.close();
return count;
} else {
return 0;
}
}
public int getBucketCountNotClosed() {
Cursor cursor = MediaStore.Images.Media.query(
mContentResolver, null, null, null, null, null);
if (cursor == null) {
return 0;
} else {
int count = 0;
while (cursor.moveToNext()) {
count++;
}
return count;
}
}
public int getBucketCountClosed() {
Cursor cursor = MediaStore.Images.Media.query(
mContentResolver, null, null, null, null, null);
if (cursor == null) {
return 0;
} else {
try {
int count = 0;
while (cursor.moveToNext()) {
count++;
}
return count;
} finally {
cursor.close();
}
}
}
private void queryUVMLegacyDbNotClosed() {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables("");
Cursor cursor = builder.query(null, null, "", null, null, null, null);
if (cursor != null) cursor.moveToFirst();
}
private void queryUVMLegacyDbClosed() {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables("");
Cursor cursor = builder.query(null, null, "", null, null, null, null);
if (cursor != null) cursor.close();
}
public int completeDownloadClosed(DownloadManager downloadManager) {
DownloadManager.Query query = new DownloadManager.Query();
Cursor cursor = (Cursor) null;
try {
cursor = downloadManager.query(query);
if (cursor == null) {
return 0;
} else {
return cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
}
} finally {
if (cursor != null) cursor.close();
}
}
public int completeDownloadNotClosed(DownloadManager downloadManager) {
DownloadManager.Query query = new DownloadManager.Query();
Cursor cursor = null;
try {
cursor = downloadManager.query(query);
if (cursor == null) {
return 0;
} else {
return cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
}
} finally {
//cursor.close();
}
}
private void loadPrefsFromContentProviderClosed() {
ContentProviderClient contentProviderClient =
mContentResolver.acquireContentProviderClient("");
if (contentProviderClient != null) {
Cursor cursor = null;
try {
try {
cursor = contentProviderClient.query(null, null, null, null, null);
} catch (RemoteException ex) {
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
}
private void loadPrefsFromContentProviderNotClosed() {
ContentProviderClient contentProviderClient =
mContentResolver.acquireContentProviderClient("");
if (contentProviderClient == null) return;
Cursor cursor = null;
try {
try {
cursor = contentProviderClient.query(null, null, null, null, null);
} catch (RemoteException ex) {
}
} finally {
if (cursor != null) {
//cursor.close();
}
}
}
class NamedCursor extends CursorWrapper {
private String mName;
NamedCursor(Cursor cursor, String name) {
super(cursor);
mName = name;
}
}
public Cursor cursorWrapperReturned(SQLiteDatabase sqLiteDatabase) {
Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null);
return new NamedCursor(cursor, "abc");
}
// TODO (#7474990): investigate why is Infer reporting a resource leak here
// public void cursorWrapperClosed(SQLiteDatabase sqLiteDatabase) {
// Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null);
// Cursor c = new NamedCursor(cursor, "abc");
// c.close();
// }
native NamedCursor createWrapper(Cursor cursor);
public NamedCursor cursorAttachedTheWrapper(SQLiteDatabase sqLiteDatabase) {
Cursor cursor = sqLiteDatabase.query("events", null, null, null, null, null, null);
return createWrapper(cursor);
}
}