From: short <> Date: Mon, 3 Nov 2003 11:11:21 +0000 (+0000) Subject: Fixed serious memory leak during each sandbox-server spawn. X-Git-Tag: captive-1_0_2~37 X-Git-Url: http://git.jankratochvil.net/?p=captive.git;a=commitdiff_plain;h=d9ed28783f1fead15ddacd50782e3c7fdc004b7d;ds=sidebyside Fixed serious memory leak during each sandbox-server spawn. --- diff --git a/src/libcaptive/sandbox/split.c b/src/libcaptive/sandbox/split.c index 3a42c02..72107a1 100644 --- a/src/libcaptive/sandbox/split.c +++ b/src/libcaptive/sandbox/split.c @@ -331,11 +331,12 @@ static void options_module_captive_to_options_module_corba g_return_if_fail(src_options_module_captive->type==CAPTIVE_OPTIONS_MODULE_TYPE_PE32); - dest_options_module_corba->pathname_utf8=g_strdup(src_options_module_captive->pathname_utf8); - dest_options_module_corba->data._buffer=g_memdup(src_options_module_captive->u.pe32.base, - src_options_module_captive->u.pe32.length); + dest_options_module_corba->pathname_utf8=CORBA_string_dup(src_options_module_captive->pathname_utf8); dest_options_module_corba->data._maximum=src_options_module_captive->u.pe32.length; dest_options_module_corba->data._length =src_options_module_captive->u.pe32.length; + dest_options_module_corba->data._buffer=Captive_Bytes_allocbuf(dest_options_module_corba->data._maximum); + memcpy(dest_options_module_corba->data._buffer,src_options_module_captive->u.pe32.base, + src_options_module_captive->u.pe32.length); dest_options_module_corba->data._release=TRUE; } @@ -699,7 +700,9 @@ gchar *s; g_assert(errint==0); } - options_corba.g_log_func=GLogFunc_object; + options_corba.g_log_func=CORBA_Object_duplicate(GLogFunc_object,&captive_corba_ev); + g_assert(validate_CORBA_Environment(&captive_corba_ev)); + options_module_captive_to_options_module_corba(&options_corba.filesystem,&CAPTIVE_VFS_OBJECT(captive_vfs_parent_object)->options.filesystem); /* Prevent secondary captive_giochannel_blind inside of our sandbox child * as we already have one captive_giochannel_blind in the parent. @@ -708,12 +711,14 @@ gchar *s; : CAPTIVE_VFS_OBJECT(captive_vfs_parent_object)->options.rwmode); options_corba.media =CAPTIVE_VFS_OBJECT(captive_vfs_parent_object)->options.media; options_corba.debug_messages=CAPTIVE_VFS_OBJECT(captive_vfs_parent_object)->options.debug_messages; - options_corba.image_iochannel=CaptiveIOChannel_object; + + options_corba.image_iochannel=CORBA_Object_duplicate(CaptiveIOChannel_object,&captive_corba_ev); + g_assert(validate_CORBA_Environment(&captive_corba_ev)); load_module_length=g_list_length(CAPTIVE_VFS_OBJECT(captive_vfs_parent_object)->options.load_module); - captive_newn(options_corba.load_module._buffer,load_module_length); options_corba.load_module._maximum=load_module_length; options_corba.load_module._length=load_module_length; + options_corba.load_module._buffer=Captive_CaptiveOptionsModuleList_allocbuf(options_corba.load_module._maximum); options_corba.load_module._release=TRUE; for (load_moduleui=0,load_module_node=CAPTIVE_VFS_OBJECT(captive_vfs_parent_object)->options.load_module; load_module_node; @@ -725,7 +730,8 @@ gchar *s; Captive_Vfs_init(Vfs_object,&options_corba,&captive_corba_ev); g_assert(validate_CORBA_Environment(&captive_corba_ev)); - /* FIXME: Free 'options_corba' - LEAK */ + Captive_CaptiveOptions__freekids(&options_corba, + NULL); /* d; unused */ captive_vfs_parent_object->corba_Vfs_object=Vfs_object; captive_vfs_parent_object->corba_GLogFunc_object=GLogFunc_object;