Browse Source

- native bullet: add some checks to physics space and physics vehicle

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8410 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
nor..67 14 years ago
parent
commit
20c5994db4

+ 3 - 0
engine/src/bullet/native/com_jme3_bullet_PhysicsSpace.cpp

@@ -390,6 +390,9 @@ extern "C" {
     JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_finalizeNative
     JNIEXPORT void JNICALL Java_com_jme3_bullet_PhysicsSpace_finalizeNative
     (JNIEnv * env, jobject object, jlong spaceId) {
     (JNIEnv * env, jobject object, jlong spaceId) {
         jmePhysicsSpace* space = (jmePhysicsSpace*) spaceId;
         jmePhysicsSpace* space = (jmePhysicsSpace*) spaceId;
+        if (space == NULL) {
+            return;
+        }
         delete(space);
         delete(space);
     }
     }
 
 

+ 12 - 0
engine/src/bullet/native/com_jme3_bullet_objects_PhysicsVehicle.cpp

@@ -67,6 +67,7 @@ extern "C" {
     JNIEXPORT jlong JNICALL Java_com_jme3_bullet_objects_PhysicsVehicle_createVehicleRaycaster
     JNIEXPORT jlong JNICALL Java_com_jme3_bullet_objects_PhysicsVehicle_createVehicleRaycaster
     (JNIEnv *env, jobject object, jlong bodyId, jlong spaceId) {
     (JNIEnv *env, jobject object, jlong bodyId, jlong spaceId) {
         //btRigidBody* body = (btRigidBody*) bodyId;
         //btRigidBody* body = (btRigidBody*) bodyId;
+        jmeClasses::initJavaClasses(env);
         jmePhysicsSpace *space = (jmePhysicsSpace *)spaceId;
         jmePhysicsSpace *space = (jmePhysicsSpace *)spaceId;
         if (space == NULL) {
         if (space == NULL) {
             jclass newExc = env->FindClass("java/lang/NullPointerException");
             jclass newExc = env->FindClass("java/lang/NullPointerException");
@@ -84,6 +85,7 @@ extern "C" {
      */
      */
     JNIEXPORT jlong JNICALL Java_com_jme3_bullet_objects_PhysicsVehicle_createRaycastVehicle
     JNIEXPORT jlong JNICALL Java_com_jme3_bullet_objects_PhysicsVehicle_createRaycastVehicle
     (JNIEnv *env, jobject object, jlong objectId, jlong casterId) {
     (JNIEnv *env, jobject object, jlong objectId, jlong casterId) {
+        jmeClasses::initJavaClasses(env);
         btRigidBody* body = (btRigidBody*) objectId;
         btRigidBody* body = (btRigidBody*) objectId;
         if (body == NULL) {
         if (body == NULL) {
             jclass newExc = env->FindClass("java/lang/NullPointerException");
             jclass newExc = env->FindClass("java/lang/NullPointerException");
@@ -92,6 +94,11 @@ extern "C" {
         }
         }
         body->setActivationState(DISABLE_DEACTIVATION);
         body->setActivationState(DISABLE_DEACTIVATION);
         btVehicleRaycaster* caster = (btDefaultVehicleRaycaster*) casterId;
         btVehicleRaycaster* caster = (btDefaultVehicleRaycaster*) casterId;
+        if (caster == NULL) {
+            jclass newExc = env->FindClass("java/lang/NullPointerException");
+            env->ThrowNew(newExc, "The native object does not exist.");
+            return 0;
+        }
         btRaycastVehicle::btVehicleTuning tuning;
         btRaycastVehicle::btVehicleTuning tuning;
         btRaycastVehicle* vehicle = new btRaycastVehicle(tuning, body, caster);
         btRaycastVehicle* vehicle = new btRaycastVehicle(tuning, body, caster);
         return (long) vehicle;
         return (long) vehicle;
@@ -250,6 +257,11 @@ extern "C" {
             return;
             return;
         }
         }
         delete(vehicle);
         delete(vehicle);
+        if (rayCaster == NULL) {
+            jclass newExc = env->FindClass("java/lang/NullPointerException");
+            env->ThrowNew(newExc, "The native object does not exist.");
+            return;
+        }
         delete(rayCaster);
         delete(rayCaster);
     }
     }