]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
gvariant module: Fix memory leak when deserializing hashtables with gvariant
authorLuca Bruno <lucabru@src.gnome.org>
Sun, 15 Jun 2014 09:36:56 +0000 (11:36 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Sun, 15 Jun 2014 09:45:57 +0000 (11:45 +0200)
Fixes bug 698260

codegen/valagvariantmodule.vala

index 8b0873179ad0ad1346a93f9c07933101b02a9e2f..409940eff3bbda6005fbbc7da73253aecba64ebb 100644 (file)
@@ -394,17 +394,26 @@ public class Vala.GVariantModule : GAsyncModule {
                if (key_type.data_type == string_type.data_type) {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_str_hash"));
                        hash_table_new.add_argument (new CCodeIdentifier ("g_str_equal"));
+               } else if (key_type.data_type == gvariant_type) {
+                       hash_table_new.add_argument (new CCodeIdentifier ("g_variant_hash"));
+                       hash_table_new.add_argument (new CCodeIdentifier ("g_variant_equal"));
                } else {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_direct_hash"));
                        hash_table_new.add_argument (new CCodeIdentifier ("g_direct_equal"));
                }
+               
                if (key_type.data_type == string_type.data_type) {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_free"));
+               } else if (key_type.data_type == gvariant_type) {
+                       hash_table_new.add_argument (new CCodeCastExpression (new CCodeIdentifier ("g_variant_unref"), "GDestroyNotify"));
                } else {
                        hash_table_new.add_argument (new CCodeIdentifier ("NULL"));
                }
+               
                if (value_type.data_type == string_type.data_type) {
                        hash_table_new.add_argument (new CCodeIdentifier ("g_free"));
+               } else if (value_type.data_type == gvariant_type) {
+                       hash_table_new.add_argument (new CCodeCastExpression (new CCodeIdentifier ("g_variant_unref"), "GDestroyNotify"));
                } else {
                        hash_table_new.add_argument (new CCodeIdentifier ("NULL"));
                }