diff --git a/girepository/girmodule-private.h b/girepository/girmodule-private.h index c3cb9df2a..fba781d5e 100644 --- a/girepository/girmodule-private.h +++ b/girepository/girmodule-private.h @@ -47,7 +47,7 @@ struct _GIIrModule char *version; char *shared_library; char *c_prefix; - GList *dependencies; + GList *dependencies; /* (owned) */ GList *entries; /* All modules that are included directly or indirectly */ diff --git a/girepository/girmodule.c b/girepository/girmodule.c index 549a984ae..c3309cdc2 100644 --- a/girepository/girmodule.c +++ b/girepository/girmodule.c @@ -83,7 +83,7 @@ gi_ir_module_free (GIIrModule *module) gi_ir_node_free ((GIIrNode *)e->data); g_list_free (module->entries); - /* Don't free dependencies, we inherit that from the parser */ + g_clear_list (&module->dependencies, g_free); g_list_free (module->include_modules); diff --git a/girepository/girparser.c b/girepository/girparser.c index 2ff9009a0..de60eef1f 100644 --- a/girepository/girparser.c +++ b/girepository/girparser.c @@ -3194,7 +3194,9 @@ start_element_handler (GMarkupParseContext *context, ctx->include_modules = NULL; ctx->modules = g_list_append (ctx->modules, ctx->current_module); - ctx->current_module->dependencies = ctx->dependencies; + g_clear_list (&ctx->current_module->dependencies, g_free); + ctx->current_module->dependencies = + g_list_copy_deep (ctx->dependencies, (GCopyFunc) g_strdup, NULL); state_switch (ctx, STATE_NAMESPACE); goto out; @@ -3824,6 +3826,7 @@ gi_ir_parser_parse_string (GIIrParser *parser, } g_clear_slist (&ctx.node_stack, NULL); + g_clear_list (&ctx.dependencies, g_free); g_markup_parse_context_free (context); if (ctx.modules)