From b461194a91ffedd8d5846bb3a8724a5880b78ffe Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Mon, 21 Dec 2020 13:52:54 +0100 Subject: [PATCH] vala: value_type of PointerIndirection expressions must not be owned A member-access making the wrong assumption of a previous copy resulted in a double free. Fixes https://gitlab.gnome.org/GNOME/vala/issues/1118 --- tests/Makefile.am | 1 + .../localvariable-var-pointer-initializer.vala | 11 +++++++++++ vala/valapointerindirection.vala | 1 + 3 files changed, 13 insertions(+) create mode 100644 tests/semantic/localvariable-var-pointer-initializer.vala diff --git a/tests/Makefile.am b/tests/Makefile.am index 378768758..bd8f62d7e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -770,6 +770,7 @@ TESTS = \ semantic/interface-prerequisite-multiple.test \ semantic/literal-expression.test \ semantic/localvariable-owned-to-unowned.test \ + semantic/localvariable-var-pointer-initializer.vala \ semantic/localvariable-var-static-access-instance-field.test \ semantic/localvariable-var-static-access-instance-method.test \ semantic/localvariable-var-static-access-instance-property.test \ diff --git a/tests/semantic/localvariable-var-pointer-initializer.vala b/tests/semantic/localvariable-var-pointer-initializer.vala new file mode 100644 index 000000000..36ba40ec4 --- /dev/null +++ b/tests/semantic/localvariable-var-pointer-initializer.vala @@ -0,0 +1,11 @@ +struct Foo { + public string s; +} + +void main () { + { + Foo foo = { "foo" }; + var foo_p = &foo; + assert (foo_p.s == "foo"); + } +} diff --git a/vala/valapointerindirection.vala b/vala/valapointerindirection.vala index 3a126173f..cc183d953 100644 --- a/vala/valapointerindirection.vala +++ b/vala/valapointerindirection.vala @@ -98,6 +98,7 @@ public class Vala.PointerIndirection : Expression { return false; } value_type = pointer_type.base_type; + value_type.value_owned = false; } else { error = true; Report.error (source_reference, "Pointer indirection not supported for this expression"); -- 2.47.2