=?UTF-8?Q?Lauri=20Kentt=C3=A4=20?=: cmd: Fix memory leak in WCMD_reduce.

Alexandre Julliard julliard at winehq.org
Mon Dec 19 16:53:07 CST 2016


Module: wine
Branch: master
Commit: 21dd04670c1e2fa06bfc5bbb5b0c6f4537cde9a4
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=21dd04670c1e2fa06bfc5bbb5b0c6f4537cde9a4

Author: Lauri Kenttä <lauri.kentta at gmail.com>
Date:   Sat Dec 17 10:33:27 2016 +0200

cmd: Fix memory leak in WCMD_reduce.

Signed-off-by: Lauri Kenttä <lauri.kentta at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 programs/cmd/builtins.c | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index cd319f8..f3dbe3a 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -3689,7 +3689,7 @@ static WCHAR WCMD_popoperator(OPSTACK **opstack) {
  * Returns non-zero on error.
  */
 static int WCMD_reduce(OPSTACK **opstack, VARSTACK **varstack) {
-  OPSTACK *thisop;
+  WCHAR thisop;
   int var1,var2;
   int rc = 0;
 
@@ -3699,13 +3699,12 @@ static int WCMD_reduce(OPSTACK **opstack, VARSTACK **varstack) {
   }
 
   /* Remove the top operator */
-  thisop = *opstack;
-  *opstack = (*opstack)->next;
-  WINE_TRACE("Reducing the stacks - processing operator %c\n", thisop->op);
+  thisop = WCMD_popoperator(opstack);
+  WINE_TRACE("Reducing the stacks - processing operator %c\n", thisop);
 
   /* One variable operators */
   var1 = WCMD_popnumber(varstack);
-  switch (thisop->op) {
+  switch (thisop) {
   case '!': WCMD_pushnumber(NULL, !var1, varstack);
             break;
   case '~': WCMD_pushnumber(NULL, ~var1, varstack);
@@ -3721,7 +3720,7 @@ static int WCMD_reduce(OPSTACK **opstack, VARSTACK **varstack) {
     WINE_TRACE("No operands left for the reduce?\n");
     return WCMD_NOOPERAND;
   }
-  switch (thisop->op) {
+  switch (thisop) {
   case '!':
   case '~':
   case OP_POSITIVE:
@@ -3792,11 +3791,11 @@ static int WCMD_reduce(OPSTACK **opstack, VARSTACK **varstack) {
           /* Make the operand stack grow by pushing the assign operator plus the
              operator to perform                                                 */
           while (calcassignments[i].op != ' ' &&
-                 calcassignments[i].calculatedop != thisop->op) {
+                 calcassignments[i].calculatedop != thisop) {
             i++;
           }
           if (calcassignments[i].calculatedop == ' ') {
-            WINE_ERR("Unexpected operator %c\n", thisop->op);
+            WINE_ERR("Unexpected operator %c\n", thisop);
             return WCMD_NOOPERATOR;
           }
           WCMD_pushoperator('=', WCMD_getprecedence('='), opstack);
@@ -3820,10 +3819,9 @@ static int WCMD_reduce(OPSTACK **opstack, VARSTACK **varstack) {
           break;
         }
 
-  default:  WINE_ERR("Unrecognized operator %c\n", thisop->op);
+  default:  WINE_ERR("Unrecognized operator %c\n", thisop);
   }
 
-  heap_free(thisop);
   return rc;
 }
 




More information about the wine-cvs mailing list