Fix parameters passing when emitting signal

The issue was caused because we were using variables local to the `for` loop block.
Address [feedback](https://github.com/godotengine/godot/pull/39047#issuecomment-634545849) by @pouleyKetchoupp regarding the use of arrays on stack with dynamic size.
This commit is contained in:
Fredia Huya-Kouadio 2020-05-25 11:48:49 -07:00
parent 7c332d9386
commit 3c0b26e29c
1 changed files with 6 additions and 4 deletions

View File

@ -119,13 +119,15 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_plugin_GodotPlugin_nativeEmitS
String signal_name = jstring_to_string(j_signal_name, env); String signal_name = jstring_to_string(j_signal_name, env);
int count = env->GetArrayLength(j_signal_params); int count = env->GetArrayLength(j_signal_params);
const Variant *args[count]; ERR_FAIL_COND_MSG(count > VARIANT_ARG_MAX, "Maximum argument count exceeded!");
Variant variant_params[VARIANT_ARG_MAX];
const Variant *args[VARIANT_ARG_MAX];
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
jobject j_param = env->GetObjectArrayElement(j_signal_params, i); jobject j_param = env->GetObjectArrayElement(j_signal_params, i);
Variant variant = _jobject_to_variant(env, j_param); variant_params[i] = _jobject_to_variant(env, j_param);
args[i] = &variant; args[i] = &variant_params[i];
env->DeleteLocalRef(j_param); env->DeleteLocalRef(j_param);
}; };