Skip to content

Commit 627763b

Browse files
committed
Fix crashes
1 parent b32447a commit 627763b

File tree

2 files changed

+42
-30
lines changed

2 files changed

+42
-30
lines changed

library/src/main/cpp/contacts.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ session::config::contact_info deserialize_contact(JNIEnv *env, jobject info, ses
6363
get_pro_features(env->GetMethodID(java_class, "getProFeaturesRaw", "()J")) {}
6464
};
6565

66-
static ClassInfo class_info(env, JavaLocalRef(env, env->GetObjectClass(info)).get());
66+
static ClassInfo class_info(env, info);
6767

6868
JavaLocalRef account_id(env, static_cast<jstring>(env->CallObjectMethod(info, class_info.get_id)));
6969
JavaLocalRef name(env, static_cast<jstring>(env->CallObjectMethod(info, class_info.get_name)));

library/src/main/cpp/util.cpp

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ namespace util {
3535
return {};
3636
}
3737

38-
return jni_utils::JavaByteArrayRef(env, byteArray).copy();
38+
return JavaByteArrayRef(env, byteArray).copy();
3939
}
4040

4141
JavaLocalRef<jbyteArray> bytes_from_span(JNIEnv* env, std::span<const unsigned char> from_str) {
@@ -47,40 +47,52 @@ namespace util {
4747
}
4848

4949
JavaLocalRef<jobject> serialize_user_pic(JNIEnv *env, session::config::profile_pic pic) {
50-
static jni_utils::BasicJavaClassInfo class_info(
50+
static BasicJavaClassInfo class_info(
5151
env, "network/loki/messenger/libsession_util/util/UserPic",
5252
"(Ljava/lang/String;Lnetwork/loki/messenger/libsession_util/util/Bytes;)V"
5353
);
5454

5555
return {env, env->NewObject(class_info.java_class, class_info.constructor,
56-
jni_utils::JavaLocalRef(env, env->NewStringUTF(pic.url.data())).get(),
57-
jni_utils::session_bytes_from_range(env, pic.key).get()
56+
JavaLocalRef(env, env->NewStringUTF(pic.url.data())).get(),
57+
session_bytes_from_range(env, pic.key).get()
5858
)};
5959
}
6060

6161

6262
session::config::profile_pic deserialize_user_pic(JNIEnv *env, jobject user_pic) {
63-
jni_utils::JavaLocalRef clazz(env, env->GetObjectClass(user_pic));
63+
struct ClassInfo : public JavaClassInfo {
64+
jmethodID url_getter;
65+
jmethodID key_getter;
66+
67+
ClassInfo(JNIEnv *env, jobject obj)
68+
: JavaClassInfo(env, obj)
69+
, url_getter(env->GetMethodID(java_class, "getUrl", "()Ljava/lang/String;"))
70+
, key_getter(env->GetMethodID(java_class, "getKeyAsByteArray", "()[B"))
71+
{}
72+
};
73+
74+
static ClassInfo class_info(env, user_pic);
75+
6476
return {
65-
jni_utils::JavaStringRef(env, (jstring) (env->CallObjectMethod(user_pic, env->GetMethodID(clazz.get(), "getUrl", "()Ljava/lang/String;")))).view(),
66-
util::vector_from_bytes(env, static_cast<jbyteArray>(env->CallObjectMethod(user_pic, env->GetMethodID(clazz.get(), "getKeyAsByteArray", "()[B"))))
77+
JavaStringRef(env, (jstring) (env->CallObjectMethod(user_pic, class_info.url_getter))).view(),
78+
util::vector_from_bytes(env, static_cast<jbyteArray>(env->CallObjectMethod(user_pic, class_info.key_getter)))
6779
};
6880
}
6981

7082
JavaLocalRef<jobject> serialize_expiry(JNIEnv *env, const session::config::expiration_mode& mode, const std::chrono::seconds& time_seconds) {
7183
if (mode == session::config::expiration_mode::none) {
72-
auto none = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode$NONE"));
84+
auto none = JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode$NONE"));
7385
jfieldID none_instance = env->GetStaticFieldID(none.get(), "INSTANCE", "Lnetwork/loki/messenger/libsession_util/util/ExpiryMode$NONE;");
7486

7587
return {env, env->GetStaticObjectField(none.get(), none_instance)};
7688
} else if (mode == session::config::expiration_mode::after_send) {
77-
static jni_utils::BasicJavaClassInfo class_info(
89+
static BasicJavaClassInfo class_info(
7890
env, "network/loki/messenger/libsession_util/util/ExpiryMode$AfterSend",
7991
"(J)V"
8092
);
8193
return {env, env->NewObject(class_info.java_class, class_info.constructor, time_seconds.count())};
8294
} else if (mode == session::config::expiration_mode::after_read) {
83-
static jni_utils::BasicJavaClassInfo class_info(
95+
static BasicJavaClassInfo class_info(
8496
env, "network/loki/messenger/libsession_util/util/ExpiryMode$AfterRead",
8597
"(J)V"
8698
);
@@ -90,12 +102,12 @@ namespace util {
90102
}
91103

92104
std::pair<session::config::expiration_mode, long> deserialize_expiry(JNIEnv *env, jobject expiry_mode) {
93-
auto parent = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode"));
94-
auto after_read = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode$AfterRead"));
95-
auto after_send = jni_utils::JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode$AfterSend"));
105+
auto parent = JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode"));
106+
auto after_read = JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode$AfterRead"));
107+
auto after_send = JavaLocalRef(env, env->FindClass("network/loki/messenger/libsession_util/util/ExpiryMode$AfterSend"));
96108
jfieldID duration_seconds = env->GetFieldID(parent.get(), "expirySeconds", "J");
97109

98-
auto object_class = jni_utils::JavaLocalRef(env, env->GetObjectClass(expiry_mode));
110+
auto object_class = JavaLocalRef(env, env->GetObjectClass(expiry_mode));
99111

100112
if (env->IsSameObject(object_class.get(), after_read.get())) {
101113
return std::pair(session::config::expiration_mode::after_read, env->GetLongField(expiry_mode, duration_seconds));
@@ -112,7 +124,7 @@ namespace util {
112124
return {env, nullptr};
113125
}
114126

115-
static jni_utils::BasicJavaClassInfo class_info(
127+
static BasicJavaClassInfo class_info(
116128
env, "java/lang/Long",
117129
"(J)V"
118130
);
@@ -136,11 +148,11 @@ Java_network_loki_messenger_libsession_1util_util_MultiEncrypt_encryptForMultipl
136148
std::vector<std::vector<unsigned char>> message_vec{};
137149
std::vector<std::vector<unsigned char>> recipient_vec{};
138150
for (int i = 0; i < size; i++) {
139-
jni_utils::JavaLocalRef message_j(env, static_cast<jbyteArray>(env->GetObjectArrayElement(messages, i)));
140-
jni_utils::JavaLocalRef recipient_j(env, static_cast<jbyteArray>(env->GetObjectArrayElement(recipients, i)));
151+
JavaLocalRef message_j(env, static_cast<jbyteArray>(env->GetObjectArrayElement(messages, i)));
152+
JavaLocalRef recipient_j(env, static_cast<jbyteArray>(env->GetObjectArrayElement(recipients, i)));
141153

142-
message_vec.emplace_back(jni_utils::JavaByteArrayRef(env, message_j.get()).copy());
143-
recipient_vec.emplace_back(jni_utils::JavaByteArrayRef(env, recipient_j.get()).copy());
154+
message_vec.emplace_back(JavaByteArrayRef(env, message_j.get()).copy());
155+
recipient_vec.emplace_back(JavaByteArrayRef(env, recipient_j.get()).copy());
144156
}
145157

146158
std::vector<std::span<const unsigned char>> message_sv_vec{};
@@ -156,8 +168,8 @@ Java_network_loki_messenger_libsession_1util_util_MultiEncrypt_encryptForMultipl
156168
auto result = session::encrypt_for_multiple_simple(
157169
message_sv_vec,
158170
recipient_sv_vec,
159-
jni_utils::JavaByteArrayRef(env, ed25519_secret_key).get(),
160-
jni_utils::JavaStringRef(env, domain).view(),
171+
JavaByteArrayRef(env, ed25519_secret_key).get(),
172+
JavaStringRef(env, domain).view(),
161173
std::span<const unsigned char> {random_nonce.data(), 24}
162174
);
163175

@@ -173,10 +185,10 @@ Java_network_loki_messenger_libsession_1util_util_MultiEncrypt_decryptForMultipl
173185
jbyteArray sender_pub_key,
174186
jstring domain) {
175187
auto result = session::decrypt_for_multiple_simple(
176-
jni_utils::JavaByteArrayRef(env, encoded).get(),
177-
jni_utils::JavaByteArrayRef(env, secret_key).get(),
178-
jni_utils::JavaByteArrayRef(env, sender_pub_key).get(),
179-
jni_utils::JavaStringRef(env, domain).view()
188+
JavaByteArrayRef(env, encoded).get(),
189+
JavaByteArrayRef(env, secret_key).get(),
190+
JavaByteArrayRef(env, sender_pub_key).get(),
191+
JavaStringRef(env, domain).view()
180192
);
181193

182194
if (result) {
@@ -191,7 +203,7 @@ extern "C"
191203
JNIEXPORT jobject JNICALL
192204
Java_network_loki_messenger_libsession_1util_util_BaseCommunityInfo_00024Companion_parseFullUrl(
193205
JNIEnv *env, jobject thiz, jstring full_url) {
194-
auto [base, room, pk] = session::config::community::parse_full_url(jni_utils::JavaStringRef(env, full_url).view());
206+
auto [base, room, pk] = session::config::community::parse_full_url(JavaStringRef(env, full_url).view());
195207

196208
jclass clazz = env->FindClass("kotlin/Triple");
197209
jmethodID constructor = env->GetMethodID(clazz, "<init>", "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V");
@@ -296,8 +308,8 @@ Java_network_loki_messenger_libsession_1util_util_Util_lengthForCodepoints(JNIEn
296308
jobject thiz,
297309
jstring str,
298310
jint max_codepoints) {
299-
return jni_utils::run_catching_cxx_exception_or_throws<jint>(env, [=]() {
300-
jni_utils::JavaCharsRef str_ref(env, str);
311+
return run_catching_cxx_exception_or_throws<jint>(env, [=]() {
312+
JavaCharsRef str_ref(env, str);
301313
return session::utf16_count_truncated_to_codepoints(
302314
{reinterpret_cast<const char16_t *>(str_ref.chars()), str_ref.size()},
303315
max_codepoints
@@ -309,6 +321,6 @@ extern "C"
309321
JNIEXPORT jint JNICALL
310322
Java_network_loki_messenger_libsession_1util_util_Util_countCodepoints(JNIEnv *env, jobject thiz,
311323
jstring str) {
312-
jni_utils::JavaCharsRef str_ref(env, str);
324+
JavaCharsRef str_ref(env, str);
313325
return session::utf16_count({reinterpret_cast<const char16_t*>(str_ref.chars()), str_ref.size()});
314326
}

0 commit comments

Comments
 (0)