summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-03-04 18:32:55 -0800
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-03-07 09:31:16 -0800
commitb318903ab96f80de4e73dbbffb0f19be028b44ff (patch)
treeecfcf30621a06622cda8073baea7f13adbb09a91 /platform
parentc8b100ffe41092742bf2529f0e2e70cf184cab65 (diff)
downloadqtlocation-mapboxgl-b318903ab96f80de4e73dbbffb0f19be028b44ff.tar.gz
[android] Don't crash if someone tries to use OfflineRegion after delete
Diffstat (limited to 'platform')
-rwxr-xr-xplatform/android/src/jni.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp
index 7d2ae1f9cc..237fbb99da 100755
--- a/platform/android/src/jni.cpp
+++ b/platform/android/src/jni.cpp
@@ -1469,6 +1469,15 @@ void setOfflineMapboxTileCountLimit(JNIEnv *env, jni::jobject* obj, jlong defaul
defaultFileSource->setOfflineMapboxTileCountLimit(limit);
}
+mbgl::OfflineRegion* getOfflineRegionPeer(JNIEnv *env, jni::jobject* offlineRegion_) {
+ jlong offlineRegionPtr = jni::GetField<jlong>(*env, offlineRegion_, *offlineRegionPtrId);
+ if (!offlineRegionPtr) {
+ jni::ThrowNew(*env, jni::FindClass(*env, "java/lang/IllegalStateException"),
+ "Use of OfflineRegion after OfflineRegion.delete");
+ }
+ return reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr);
+}
+
void destroyOfflineRegion(JNIEnv *env, jni::jobject* offlineRegion_) {
mbgl::Log::Debug(mbgl::Event::JNI, "destroyOfflineRegion");
@@ -1494,8 +1503,7 @@ void setOfflineRegionObserver(JNIEnv *env, jni::jobject* offlineRegion_, jni::jo
mbgl::Log::Debug(mbgl::Event::JNI, "setOfflineRegionObserver");
// Offline region
- jlong offlineRegionPtr = jni::GetField<jlong>(*env, offlineRegion_, *offlineRegionPtrId);
- mbgl::OfflineRegion *offlineRegion = reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr);
+ mbgl::OfflineRegion* offlineRegion = getOfflineRegionPeer(env, offlineRegion_);
// File source
jni::jobject* jmanager = jni::GetField<jni::jobject*>(*env, offlineRegion_, *offlineRegionOfflineManagerId);
@@ -1617,8 +1625,7 @@ void setOfflineRegionDownloadState(JNIEnv *env, jni::jobject* offlineRegion_, ji
}
// Offline region
- jlong offlineRegionPtr = jni::GetField<jlong>(*env, offlineRegion_, *offlineRegionPtrId);
- mbgl::OfflineRegion *offlineRegion = reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr);
+ mbgl::OfflineRegion* offlineRegion = getOfflineRegionPeer(env, offlineRegion_);
// File source
jni::jobject* jmanager = jni::GetField<jni::jobject*>(*env, offlineRegion_, *offlineRegionOfflineManagerId);
@@ -1633,8 +1640,7 @@ void getOfflineRegionStatus(JNIEnv *env, jni::jobject* offlineRegion_, jni::jobj
mbgl::Log::Debug(mbgl::Event::JNI, "getOfflineRegionStatus");
// Offline region
- jlong offlineRegionPtr = jni::GetField<jlong>(*env, offlineRegion_, *offlineRegionPtrId);
- mbgl::OfflineRegion *offlineRegion = reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr);
+ mbgl::OfflineRegion* offlineRegion = getOfflineRegionPeer(env, offlineRegion_);
// File source
jni::jobject* jmanager = jni::GetField<jni::jobject*>(*env, offlineRegion_, *offlineRegionOfflineManagerId);
@@ -1689,8 +1695,7 @@ void deleteOfflineRegion(JNIEnv *env, jni::jobject* offlineRegion_, jni::jobject
mbgl::Log::Debug(mbgl::Event::JNI, "deleteOfflineRegion");
// Offline region
- jlong offlineRegionPtr = jni::GetField<jlong>(*env, offlineRegion_, *offlineRegionPtrId);
- mbgl::OfflineRegion *offlineRegion = reinterpret_cast<mbgl::OfflineRegion *>(offlineRegionPtr);
+ mbgl::OfflineRegion* offlineRegion = getOfflineRegionPeer(env, offlineRegion_);
// File source
jni::jobject* jmanager = jni::GetField<jni::jobject*>(*env, offlineRegion_, *offlineRegionOfflineManagerId);