From 023a920a511cb3e488608773d36b1a18b9172893 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Wed, 11 Mar 2020 19:38:50 +0900 Subject: [PATCH] [gamecode] Replace lost parameter auto-reset rcallN messes with the progs parameter pointers and not resetting them can cause incorrect data to be copied into the called function. --- libs/gamecode/pr_exec.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libs/gamecode/pr_exec.c b/libs/gamecode/pr_exec.c index 47b39bc58..d673b7d1c 100644 --- a/libs/gamecode/pr_exec.c +++ b/libs/gamecode/pr_exec.c @@ -199,6 +199,7 @@ PR_EnterFunction (progs_t *pr, bfunction_t *f) if (pr->pr_params[i] != pr->pr_real_params[i]) { copy_param (pr->pr_real_params[i], pr->pr_params[i], f->parm_size[i].size); + pr->pr_params[i] = pr->pr_real_params[i]; } } } else if (f->numparms < 0) { @@ -210,6 +211,7 @@ PR_EnterFunction (progs_t *pr, bfunction_t *f) if (pr->pr_params[i] != pr->pr_real_params[i]) { copy_param (pr->pr_real_params[i], pr->pr_params[i], f->parm_size[i].size); + pr->pr_params[i] = pr->pr_real_params[i]; } } dparmsize_t parmsize = { pr->pr_param_size, pr->pr_param_alignment }; @@ -221,6 +223,7 @@ PR_EnterFunction (progs_t *pr, bfunction_t *f) if (pr->pr_params[i] != pr->pr_real_params[i]) { copy_param (pr->pr_real_params[i], pr->pr_params[i], parmsize.size); + pr->pr_params[i] = pr->pr_real_params[i]; } } }