From e38fc153f5185bad4ddebecad3cb3b5081d30f4f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Thu, 25 Jan 2018 12:11:39 +0100
Subject: [PATCH] Compiler: Fixed type leak in get_argument_type().

Fixes [PIKE-60].
---
 src/pike_types.c | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/pike_types.c b/src/pike_types.c
index e073237095..2cad46a45e 100644
--- a/src/pike_types.c
+++ b/src/pike_types.c
@@ -5648,14 +5648,18 @@ struct pike_type *check_call(struct pike_type *args,
  */
 struct pike_type *get_argument_type(struct pike_type *fun, int arg_no)
 {
-  struct pike_type *tmp;
+  struct pike_type *tmp, *tmp2;
 
  loop:
   switch(fun->type) {
   case T_OR:
-    return or_pike_types(get_argument_type(fun->car, arg_no),
-			 get_argument_type(fun->cdr, arg_no),
-			 1);
+    fun = or_pike_types(tmp = get_argument_type(fun->car, arg_no),
+			tmp2 = get_argument_type(fun->cdr, arg_no),
+			1);
+    free_type(tmp);
+    free_type(tmp2);
+    return fun;
+
   case T_FUNCTION:
     if (arg_no > 0) {
       arg_no--;
-- 
GitLab