Fixed serious memory leak during each sandbox-server spawn.
authorshort <>
Mon, 3 Nov 2003 11:11:21 +0000 (11:11 +0000)
committershort <>
Mon, 3 Nov 2003 11:11:21 +0000 (11:11 +0000)
src/libcaptive/sandbox/split.c

index 3a42c02..72107a1 100644 (file)
@@ -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;