From: Rico Tzschichholz Date: Wed, 3 Feb 2021 22:16:41 +0000 (+0100) Subject: codegen: Don't leak memory moving heap-allocated struct to stack X-Git-Tag: 0.51.1~20 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=63551acaf0d83fac8b50904c2759c1098fbfaa71;p=thirdparty%2Fvala.git codegen: Don't leak memory moving heap-allocated struct to stack Found by -fsanitize=address --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index e4ab211fe..9e46dd2f6 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -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 &&