diff --git a/app/build.gradle b/app/build.gradle index 49ecd7a8f5..03e76063ea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -101,6 +101,7 @@ dependencies { } implementation project(":libsignal") implementation project(":libsession") + implementation project(":libsession-util") implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:$kotlinxJsonVersion" implementation "com.github.oxen-io.session-android-curve-25519:curve25519-java:$curve25519Version" implementation project(":liblazysodium") diff --git a/libsession-util/src/main/cpp/contacts.cpp b/libsession-util/src/main/cpp/contacts.cpp index f57ee1e2a3..6bdcb48df2 100644 --- a/libsession-util/src/main/cpp/contacts.cpp +++ b/libsession-util/src/main/cpp/contacts.cpp @@ -6,7 +6,9 @@ JNIEXPORT jobject JNICALL Java_network_loki_messenger_libsession_1util_Contacts_get(JNIEnv *env, jobject thiz, jstring session_id) { auto contacts = ptrToContacts(env, thiz); - auto contact = contacts->get(env->GetStringUTFChars(session_id, nullptr)); + auto session_id_chars = env->GetStringUTFChars(session_id, nullptr); + auto contact = contacts->get(session_id_chars); + env->ReleaseStringUTFChars(session_id, session_id_chars); if (!contact) return nullptr; jobject j_contact = serialize_contact(env, contact.value()); return j_contact; @@ -17,7 +19,9 @@ JNIEXPORT jobject JNICALL Java_network_loki_messenger_libsession_1util_Contacts_getOrCreate(JNIEnv *env, jobject thiz, jstring session_id) { auto contacts = ptrToContacts(env, thiz); - auto contact = contacts->get_or_create(env->GetStringUTFChars(session_id, nullptr)); + auto session_id_chars = env->GetStringUTFChars(session_id, nullptr); + auto contact = contacts->get_or_create(session_id_chars); + env->ReleaseStringUTFChars(session_id, session_id_chars); return serialize_contact(env, contact); } @@ -35,7 +39,11 @@ JNIEXPORT jboolean JNICALL Java_network_loki_messenger_libsession_1util_Contacts_erase(JNIEnv *env, jobject thiz, jstring session_id) { auto contacts = ptrToContacts(env, thiz); - return contacts->erase(env->GetStringUTFChars(session_id, nullptr)); + auto session_id_chars = env->GetStringUTFChars(session_id, nullptr); + + bool result = contacts->erase(session_id_chars); + env->ReleaseStringUTFChars(session_id, session_id_chars); + return result; } extern "C" #pragma clang diagnostic push diff --git a/libsession-util/src/main/cpp/user_profile.cpp b/libsession-util/src/main/cpp/user_profile.cpp index 9c1d25f719..bb2f7dd7bc 100644 --- a/libsession-util/src/main/cpp/user_profile.cpp +++ b/libsession-util/src/main/cpp/user_profile.cpp @@ -40,7 +40,9 @@ Java_network_loki_messenger_libsession_1util_UserProfile_setName( jobject thiz, jstring newName) { auto profile = ptrToProfile(env, thiz); - profile->set_name(env->GetStringUTFChars(newName, nullptr)); + auto name_chars = env->GetStringUTFChars(newName, nullptr); + profile->set_name(name_chars); + env->ReleaseStringUTFChars(newName, name_chars); } JNIEXPORT jstring JNICALL @@ -76,6 +78,7 @@ Java_network_loki_messenger_libsession_1util_UserProfile_setPic(JNIEnv *env, job auto url = env->GetStringUTFChars(pic.first, nullptr); auto key = util::ustring_from_bytes(env, pic.second); profile->set_profile_pic(url, key); + env->ReleaseStringUTFChars(pic.first, url); } } \ No newline at end of file diff --git a/libsession-util/src/main/cpp/util.cpp b/libsession-util/src/main/cpp/util.cpp index cc15969c7f..f988c3da4e 100644 --- a/libsession-util/src/main/cpp/util.cpp +++ b/libsession-util/src/main/cpp/util.cpp @@ -65,8 +65,12 @@ Java_network_loki_messenger_libsession_1util_util_Sodium_ed25519PkToCurve25519(J jbyteArray pk) { auto ed_pk = util::ustring_from_bytes(env, pk); std::array curve_pk; // NOLINT(cppcoreguidelines-pro-type-member-init) - crypto_sign_ed25519_pk_to_curve25519(curve_pk.data(), ed_pk.data()); - + int success = crypto_sign_ed25519_pk_to_curve25519(curve_pk.data(), ed_pk.data()); + if (success != 0) { + jclass exception = env->FindClass("java/lang/Exception"); + env->ThrowNew(exception, "Invalid crypto_sign_ed25519_pk_to_curve25519 operation"); + return nullptr; + } jbyteArray curve_pk_jarray = util::bytes_from_ustring(env, session::ustring_view {curve_pk.data(), curve_pk.size()}); return curve_pk_jarray; } \ No newline at end of file