Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d31e9df0 authored by Martin Brabham's avatar Martin Brabham
Browse files

AdapterService: Fix NPE in JNI and correct type for casting and reference correct method name.

Previously, for bt_oob_data_t this tried to set_data even if the passed OobData was nullptr

For the address, it was doing a cast a jbyteArray to RawAddress* which requires a jbyte* so
the data is now converted from jbyteArray to jbyte* before casting.

getLeFlags is the correct name vs getLeFlag

Bug: 17800793
Test: Compiles, Manual test app
Tag: #feature
Change-Id: Ib001f1f2292e9e57d68131f0c1b0eddc55834b5a
parent d15ff534
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -1162,7 +1162,7 @@ static jboolean set_data(JNIEnv* env, bt_oob_data_t& oob_data, jobject oobData,
    oob_data.le_device_role = leRole;

    jint leFlag =
        callIntGetter(env, oobData, "android/bluetooth/OobData", "getLeFlag");
        callIntGetter(env, oobData, "android/bluetooth/OobData", "getLeFlags");
    oob_data.le_flags = leFlag;
  }
  return JNI_TRUE;
@@ -1213,22 +1213,32 @@ static jboolean createBondOutOfBandNative(JNIEnv* env, jobject obj,
    return JNI_FALSE;
  }

  jbyte* addr = env->GetByteArrayElements(address, NULL);
  if (addr == NULL) {
    jniThrowIOException(env, EINVAL);
    return JNI_FALSE;
  }

  // Convert P192 data from Java POJO to C Struct
  bt_oob_data_t p192_data;
  if (p192Data != NULL) {
    if (set_data(env, p192_data, p192Data, transport) == JNI_FALSE) {
      jniThrowIOException(env, EINVAL);
      return JNI_FALSE;
    }
  }

  // Convert P256 data from Java POJO to C Struct
  bt_oob_data_t p256_data;
  if (p256Data != NULL) {
    if (set_data(env, p256_data, p256Data, transport) == JNI_FALSE) {
      jniThrowIOException(env, EINVAL);
      return JNI_FALSE;
    }
  }

  return ((sBluetoothInterface->create_bond_out_of_band(
              (RawAddress*)address, transport, &p192_data, &p256_data)) ==
              (RawAddress*)addr, transport, &p192_data, &p256_data)) ==
          BT_STATUS_SUCCESS)
             ? JNI_TRUE
             : JNI_FALSE;