From fb5c4fec1f415edf0cb4fd343e6134552b9d1038 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Sun, 24 Mar 1996 15:18:51 +0100
Subject: [PATCH] fixed small bug when garbage collecting

Rev: src/operators.c:1.6
---
 src/operators.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/operators.c b/src/operators.c
index fe9859685b..b280c5a9ef 100644
--- a/src/operators.c
+++ b/src/operators.c
@@ -382,13 +382,13 @@ void o_subtract()
   case T_STRING:
   {
     struct lpc_string *s,*ret;
-    sp--;
     s=make_shared_string("");
-    ret=string_replace(sp[-1].u.string,sp[0].u.string,s);
+    ret=string_replace(sp[-2].u.string,sp[-1].u.string,s);
+    free_string(sp[-2].u.string);
     free_string(sp[-1].u.string);
-    free_string(sp[0].u.string);
     free_string(s);
-    sp[-1].u.string=ret;
+    sp[-2].u.string=ret;
+    sp--;
     return;
   }
 
@@ -704,12 +704,12 @@ void o_multiply()
   case TWO_TYPES(T_ARRAY,T_STRING):
     {
       struct lpc_string *ret;
+      ret=implode(sp[-2].u.array,sp[-1].u.string);
+      free_string(sp[-1].u.string);
+      free_array(sp[-2].u.array);
+      sp[-2].type=T_STRING;
+      sp[-2].u.string=ret;
       sp--;
-      ret=implode(sp[-1].u.array,sp[0].u.string);
-      free_string(sp[0].u.string);
-      free_array(sp[-1].u.array);
-      sp[-1].type=T_STRING;
-      sp[-1].u.string=ret;
       return;
     }
 
@@ -779,12 +779,12 @@ void o_divide()
   case T_STRING:
   {
     struct array *ret;
-    sp--;
-    ret=explode(sp[-1].u.string,sp[0].u.string);
+    ret=explode(sp[-2].u.string,sp[-1].u.string);
+    free_string(sp[-2].u.string);
     free_string(sp[-1].u.string);
-    free_string(sp[0].u.string);
-    sp[-1].type=T_ARRAY;
-    sp[-1].u.array=ret;
+    sp[-2].type=T_ARRAY;
+    sp[-2].u.array=ret;
+    sp--;
     return;
   }
 
-- 
GitLab