From 110ed1c9d9dffe1583b8ea596b7204b93a7de385 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini <sylvain.berfini@linphone.org> Date: Thu, 27 Nov 2014 10:29:39 +0100 Subject: [PATCH] Fix crash when receiving some UTF-8 chars --- coreapi/linphonecore_jni.cc | 10 +++++++--- .../org/linphone/core/LinphoneChatMessageImpl.java | 11 +++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index 8f4b441542..be72e283fa 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -2726,11 +2726,15 @@ extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_store(JNIEnv* en linphone_chat_message_store((LinphoneChatMessage*)ptr); } -extern "C" jstring Java_org_linphone_core_LinphoneChatMessageImpl_getText(JNIEnv* env +extern "C" jbyteArray Java_org_linphone_core_LinphoneChatMessageImpl_getText(JNIEnv* env ,jobject thiz ,jlong ptr) { - jstring jvalue =env->NewStringUTF(linphone_chat_message_get_text((LinphoneChatMessage*)ptr)); - return jvalue; + const char *message = linphone_chat_message_get_text((LinphoneChatMessage*)ptr); + size_t length = strlen(message); + jbyteArray array = env->NewByteArray(length); + env->SetByteArrayRegion(array, 0, length, (const jbyte*)message); + + return array; } extern "C" jint Java_org_linphone_core_LinphoneChatMessageImpl_getReason(JNIEnv* env diff --git a/java/impl/org/linphone/core/LinphoneChatMessageImpl.java b/java/impl/org/linphone/core/LinphoneChatMessageImpl.java index 7e6d474a22..6d6009c921 100644 --- a/java/impl/org/linphone/core/LinphoneChatMessageImpl.java +++ b/java/impl/org/linphone/core/LinphoneChatMessageImpl.java @@ -1,8 +1,10 @@ package org.linphone.core; +import java.io.UnsupportedEncodingException; + public class LinphoneChatMessageImpl implements LinphoneChatMessage { protected final long nativePtr; - private native String getText(long ptr); + private native byte[] getText(long ptr); private native long getPeerAddress(long ptr); private native String getExternalBodyUrl(long ptr); private native void setExternalBodyUrl(long ptr, String url); @@ -25,7 +27,12 @@ public class LinphoneChatMessageImpl implements LinphoneChatMessage { @Override public String getText() { - return getText(nativePtr); + try { + return new String(getText(nativePtr), "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return null; } @Override -- GitLab