Skip to content

Commit bb75249

Browse files
committed
Handle failures in Native#ffi_prep_closure too
1 parent a40db1b commit bb75249

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

native/dispatch.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3519,16 +3519,24 @@ Java_com_sun_jna_Native_ffi_1prep_1closure(JNIEnv *env, jclass UNUSED(cls), jlon
35193519
ffi_status s;
35203520

35213521
if ((*env)->GetJavaVM(env, &cb->vm) != JNI_OK) {
3522+
free(cb);
35223523
throwByName(env, EUnsatisfiedLink, "Can't get Java VM");
35233524
return 0;
35243525
}
35253526

35263527
cb->object = (*env)->NewWeakGlobalRef(env, obj);
35273528
cb->closure = ffi_closure_alloc(sizeof(ffi_closure), L2A(&cb->x_closure));
3529+
if (cb->closure == NULL) {
3530+
free(cb);
3531+
throwByName(env, EUnsupportedOperation, "Failed to allocate closure");
3532+
return 0;
3533+
}
35283534

35293535
s = ffi_prep_closure_loc(cb->closure, L2A(cif), &closure_handler,
35303536
cb, cb->x_closure);
35313537
if (ffi_error(env, "ffi_prep_cif", s)) {
3538+
ffi_closure_free(cb->closure);
3539+
free(cb);
35323540
return 0;
35333541
}
35343542
return A2L(cb);

0 commit comments

Comments
 (0)