]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Don't leak memory moving heap-allocated struct to stack
authorRico Tzschichholz <ricotz@ubuntu.com>
Wed, 3 Feb 2021 22:16:41 +0000 (23:16 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Wed, 3 Feb 2021 22:16:41 +0000 (23:16 +0100)
Found by -fsanitize=address

codegen/valaccodebasemodule.vala

index e4ab211fe931270d4d0eb8f92a1a20630a5ec109..9e46dd2f60fde26ac5b82341a1a965c28dea5293 100644 (file)
@@ -5403,6 +5403,11 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                var innercexpr = get_cvalue (expr.inner);
                if (expr.type_reference is ValueType && !expr.type_reference.nullable &&
                        expr.inner.value_type is ValueType && expr.inner.value_type.nullable) {
+                       if (!(expr.inner.symbol_reference is Variable)) {
+                               // heap allocated struct leaked, destroy it
+                               var value = new GLibValue (new PointerType (new VoidType ()), innercexpr);
+                               temp_ref_values.insert (0, value);
+                       }
                        // nullable integer or float or boolean or struct or enum cast to non-nullable
                        innercexpr = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, innercexpr);
                } else if (expr.type_reference is ValueType && expr.type_reference.nullable &&