Skip to content

Commit d87a8cc

Browse files
committed
fix: GetStringUTFChars crash
1 parent 90b2fb0 commit d87a8cc

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed

dart_native/android/src/main/jni/dart_native.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,6 @@ void registerNativeCallback(void *target, char* targetName, char *funName, void
312312
jobject callbackOJ = getEnv()->NewGlobalRef(getEnv()->CallStaticObjectMethodA(callbackManager, registerCallback, argValues));
313313
callbackObjCache[target] = callbackOJ;
314314
targetCache[targetAddr] = target;
315-
NSLog("HUIZZ dartport %d", dartPort);
316315
dartPortCache[targetAddr] = dartPort;
317316

318317
registerCallbackManager(targetAddr, funName, callback);
@@ -419,11 +418,16 @@ JNIEXPORT jobject JNICALL Java_com_dartnative_dart_1native_CallbackInvocationHan
419418
}
420419
else if (strcmp(argTypes[i], "Ljava/lang/String;") == 0) {
421420
jstring argString = (jstring) argument;
422-
arguments[i] = (char *) env->GetStringUTFChars(argString, 0);
421+
arguments[i] = argString == nullptr ? (char *) ""
422+
: (char *) env->GetStringUTFChars(argString, 0);
423423
env->DeleteLocalRef(argString);
424424
}
425425
}
426-
char *returnType = (char *) env->GetStringUTFChars(return_type, 0);
426+
427+
/// when return void, jstring which from native is null.
428+
char *returnType = return_type == nullptr ? nullptr
429+
: (char *) env->GetStringUTFChars(return_type, 0);
430+
427431
argTypes[argTypeLength] = returnType;
428432

429433
sem_t sem;
@@ -452,7 +456,8 @@ JNIEXPORT jobject JNICALL Java_com_dartnative_dart_1native_CallbackInvocationHan
452456
if (returnType == nullptr) {
453457
NSLog("void");
454458
} else if (strcmp(returnType, "Ljava/lang/String;") == 0) {
455-
callbackResult = env->NewStringUTF((char *) arguments[0]);
459+
callbackResult = env->NewStringUTF(arguments[0] == nullptr ? (char *) ""
460+
: (char *) arguments[0]);
456461
} else if (strcmp(returnType, "Z") == 0) {
457462
jclass booleanClass = env->FindClass("java/lang/Boolean");
458463
jmethodID methodID = env->GetMethodID(booleanClass, "<init>", "(Z)V");

0 commit comments

Comments
 (0)