summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid King <dking@redhat.com>2021-05-20 11:24:14 +0100
committerEmmanuele Bassi <ebassi@gmail.com>2021-06-18 14:28:05 +0000
commit91ce47665818eae63d3f32185dd6c18d5a9a0b34 (patch)
treea78722949d43b262516b7479ba134f7997759273
parentf49a663206b19531b8b81340b3a9358e08b9fa64 (diff)
downloadgobject-introspection-91ce47665818eae63d3f32185dd6c18d5a9a0b34.tar.gz
girepository: Fix leak in g_callable_info_invoke
Found by Coverity. https://bugzilla.redhat.com/show_bug.cgi?id=1938731
-rw-r--r--girepository/gicallableinfo.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/girepository/gicallableinfo.c b/girepository/gicallableinfo.c
index 3048e162..16e391f9 100644
--- a/girepository/gicallableinfo.c
+++ b/girepository/gicallableinfo.c
@@ -638,6 +638,7 @@ g_callable_info_invoke (GIFunctionInfo *info,
case GI_DIRECTION_IN:
tinfo = g_arg_info_get_type (ainfo);
atypes[i+offset] = g_type_info_get_ffi_type (tinfo);
+ g_base_info_unref ((GIBaseInfo *)ainfo);
g_base_info_unref ((GIBaseInfo *)tinfo);
if (in_pos >= n_in_args)
@@ -655,6 +656,7 @@ g_callable_info_invoke (GIFunctionInfo *info,
break;
case GI_DIRECTION_OUT:
atypes[i+offset] = &ffi_type_pointer;
+ g_base_info_unref ((GIBaseInfo *)ainfo);
if (out_pos >= n_out_args)
{
@@ -670,6 +672,7 @@ g_callable_info_invoke (GIFunctionInfo *info,
break;
case GI_DIRECTION_INOUT:
atypes[i+offset] = &ffi_type_pointer;
+ g_base_info_unref ((GIBaseInfo *)ainfo);
if (in_pos >= n_in_args)
{
@@ -694,9 +697,9 @@ g_callable_info_invoke (GIFunctionInfo *info,
out_pos++;
break;
default:
+ g_base_info_unref ((GIBaseInfo *)ainfo);
g_assert_not_reached ();
}
- g_base_info_unref ((GIBaseInfo *)ainfo);
}
if (throws)