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