From 67bc99223d064fd5ff5e719433e200ca8ca83b84 Mon Sep 17 00:00:00 2001
From: Wolfgang Bumiller <blub@speed.at>
Date: Sun, 23 Dec 2012 17:32:14 +0100
Subject: [PATCH] Fix a nasty bug in the executor; and make null-strings be
 shown as (null) in the trace output

---
 exec.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/exec.c b/exec.c
index 270bd14..54201ff 100644
--- a/exec.c
+++ b/exec.c
@@ -344,7 +344,10 @@ static void trace_print_global(qc_program *prog, unsigned int glob, int vtype)
                                          value->vector[2]);
             break;
         case TYPE_STRING:
-            len += print_escaped_string(prog_getstring(prog, value->string), sizeof(spaces)-len-5);
+            if (value->string)
+                len += print_escaped_string(prog_getstring(prog, value->string), sizeof(spaces)-len-5);
+            else
+                len += printf("(null)");
             len += printf(",");
             /* len += printf("\"%s\",", prog_getstring(prog, value->string)); */
             break;
@@ -532,7 +535,7 @@ static qcint prog_leavefunction(qc_program *prog)
 #endif
     if (prev) {
         qcint *globals = prog->globals + prev->firstlocal;
-        memcpy(globals, prog->localstack + oldsp, prev->locals);
+        memcpy(globals, prog->localstack + oldsp, prev->locals * sizeof(prog->localstack[0]));
         /* vec_remove(prog->localstack, oldsp, vec_size(prog->localstack)-oldsp); */
         vec_shrinkto(prog->localstack, oldsp);
     }
-- 
2.39.5