linphone-developers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Linphone-developers] [PATCH] Fix crash that occurs when illegal UTF-8 c


From: Olivier Schonken
Subject: [Linphone-developers] [PATCH] Fix crash that occurs when illegal UTF-8 characters are sent in a message
Date: Sun, 28 Sep 2014 23:02:28 +0200

Change ChatMessageImpl to pass jbyteArray from JNI, and create string in java
layer.  This works around buggy NewStringUTF function which crashes the
application when illegal modified UTF-8 characters are received.
(e.g. some iOS emoticons)

Signed-off-by: Olivier Schonken <address@hidden>
---
 coreapi/linphonecore_jni.cc                              | 12 ++++++++++++
 java/impl/org/linphone/core/LinphoneChatMessageImpl.java | 12 +++++++++++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc
index bcdf0fd..d13fda2 100644
--- a/coreapi/linphonecore_jni.cc
+++ b/coreapi/linphonecore_jni.cc
@@ -2719,6 +2719,18 @@ extern "C" void 
Java_org_linphone_core_LinphoneChatMessageImpl_store(JNIEnv*  en
        linphone_chat_message_store((LinphoneChatMessage*)ptr);
 }
 
+
+extern "C" jbyteArray 
Java_org_linphone_core_LinphoneChatMessageImpl_getTextByte(JNIEnv*  env
+                                                                               
                                                                ,jobject  thiz
+                                                                               
                                                                ,jlong ptr) {
+       const char *ubuf;
+       ubuf = linphone_chat_message_get_text((LinphoneChatMessage*)ptr);
+       jbyteArray bArray=env->NewByteArray(strlen((const char *)ubuf));
+       env->SetByteArrayRegion(bArray, 0, strlen((const char *)ubuf), (jbyte 
*)ubuf);
+       return bArray;
+}
+
+
 extern "C" jstring 
Java_org_linphone_core_LinphoneChatMessageImpl_getText(JNIEnv*  env
                                                                                
                                                                ,jobject  thiz
                                                                                
                                                                ,jlong ptr) {
diff --git a/java/impl/org/linphone/core/LinphoneChatMessageImpl.java 
b/java/impl/org/linphone/core/LinphoneChatMessageImpl.java
index d25ae42..8af6606 100644
--- a/java/impl/org/linphone/core/LinphoneChatMessageImpl.java
+++ b/java/impl/org/linphone/core/LinphoneChatMessageImpl.java
@@ -14,6 +14,7 @@ public class LinphoneChatMessageImpl implements 
LinphoneChatMessage {
        private native void store(long ptr);
        private native int getStorageId(long ptr);
        private native void unref(long ptr);
+       private native byte [] getTextByte(long ptr);
        
        protected LinphoneChatMessageImpl(long aNativePtr)  {
                nativePtr = aNativePtr;
@@ -25,7 +26,16 @@ public class LinphoneChatMessageImpl implements 
LinphoneChatMessage {
        
        @Override
        public String getText() {
-               return getText(nativePtr);
+               String utf8text;
+               try
+               {
+                       utf8text =  new String(getTextByte(nativePtr),"UTF-8");
+               }
+               catch (Exception UTFDataFormatException)
+               {
+                       utf8text =  new String( "Illegal character in message");
+               }
+               return utf8text;
        }
        
        @Override
-- 
1.8.3.2




reply via email to

[Prev in Thread] Current Thread [Next in Thread]