Skip to content
This repository was archived by the owner on Aug 31, 2021. It is now read-only.

Commit 6f46893

Browse files
Merge pull request #7318 from livecodeian/bugfix-22668
[[ Bug 22668 ]] Fix bug preventing JS execution in Android browser
2 parents cf2c5b2 + 8141840 commit 6f46893

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

engine/src/mblandroiddc.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1717,6 +1717,28 @@ static void MCAndroidEngineCallThreadCallback(void *p_context)
17171717
t_env -> DeleteLocalRef(t_java_string);
17181718
}
17191719
break;
1720+
case kMCJavaTypeUtf8CString:
1721+
{
1722+
jstring t_java_string;
1723+
if (context->is_static)
1724+
t_java_string = (jstring)t_env -> CallStaticObjectMethodA(t_class, t_method_id, t_params->params);
1725+
else
1726+
t_java_string = (jstring)t_env -> CallObjectMethodA(context->object, t_method_id, t_params->params);
1727+
if (t_cleanup_java_refs && t_env -> ExceptionCheck())
1728+
{
1729+
t_exception_thrown = true;
1730+
t_success = false;
1731+
}
1732+
1733+
char *t_utf8_string = nil;
1734+
if (t_success)
1735+
t_success = MCJavaStringToUTF8(t_env, t_java_string, t_utf8_string);
1736+
if (t_success)
1737+
*(char **)(context -> return_value) = t_utf8_string;
1738+
1739+
t_env -> DeleteLocalRef(t_java_string);
1740+
}
1741+
break;
17201742
case kMCJavaTypeMCString:
17211743
{
17221744
jstring t_java_string;

engine/src/mblandroidjava.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -605,6 +605,41 @@ bool MCJavaStringToNative(JNIEnv *env, jstring p_java_string, char *&r_native)
605605
return t_success;
606606
}
607607

608+
bool MCJavaStringToUTF8(JNIEnv *env, jstring p_java_string, char *&r_utf_8)
609+
{
610+
bool t_success = true;
611+
612+
const jchar *t_unicode_string = nil;
613+
int t_unicode_length = 0;
614+
char *t_utf8 = nil;
615+
int t_utf8_length;
616+
617+
if (p_java_string != nil)
618+
t_unicode_string = env -> GetStringChars(p_java_string, NULL);
619+
620+
if (t_unicode_string != nil)
621+
{
622+
t_unicode_length = env -> GetStringLength(p_java_string);
623+
624+
t_utf8_length = UnicodeToUTF8(t_unicode_string, t_unicode_length * 2, nil, 0);
625+
626+
t_success = MCMemoryAllocate(t_utf8_length + 1, t_utf8);
627+
628+
if (t_success)
629+
{
630+
UnicodeToUTF8(t_unicode_string, t_unicode_length * 2, t_utf8, t_utf8_length);
631+
t_utf8[t_utf8_length] = 0;
632+
}
633+
634+
env -> ReleaseStringChars(p_java_string, t_unicode_string);
635+
}
636+
637+
if (t_success)
638+
r_utf_8 = t_utf8;
639+
640+
return t_success;
641+
}
642+
608643
//////////
609644

610645
bool MCJavaStringFromStringRef(JNIEnv *env, MCStringRef p_string, jstring &r_java_string)

engine/src/mblandroidjava.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ bool MCJavaStringFromNative(JNIEnv *env, const MCString *p_string, jstring &r_ja
7575
bool MCJavaStringFromUnicode(JNIEnv *env, const MCString *p_string, jstring &r_java_string);
7676
bool MCJavaStringToUnicode(JNIEnv *env, jstring p_java_string, unichar_t *&r_unicode, uint32_t &r_length);
7777
bool MCJavaStringToNative(JNIEnv *env, jstring p_java_string, char *&r_native);
78+
bool MCJavaStringToUTF8(JNIEnv *env, jstring p_java_string, char *&r_utf_8);
7879
bool MCJavaStringToStringRef(JNIEnv *env, jstring p_java_string, MCStringRef& r_stringref);
7980
bool MCJavaStringFromStringRef(JNIEnv *env, MCStringRef p_string, jstring &r_java_string);
8081
bool MCJavaByteArrayFromDataRef(JNIEnv *env, MCDataRef p_data, jbyteArray &r_byte_array);
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# [22668] Fix bug preventing javascript being run from LiveCode script in the Android browser widget

0 commit comments

Comments
 (0)