]> code.delx.au - gnu-emacs/commitdiff
(Fbyte_code): Avoid dangerous side effects in NILP argument.
authorKen Raeburn <raeburn@raeburn.org>
Tue, 6 Dec 2005 07:39:05 +0000 (07:39 +0000)
committerKen Raeburn <raeburn@raeburn.org>
Tue, 6 Dec 2005 07:39:05 +0000 (07:39 +0000)
src/bytecode.c

index e23d835cf10e2cffebe75f24865f8ed9d0b902fc..af09061dbc3cb129d7e6cb4d72bad310fba0b3ba 100644 (file)
@@ -524,15 +524,19 @@ If the third argument is incorrect, Emacs may crash.  */)
          }
 
        case Bgotoifnil:
-         MAYBE_GC ();
-         op = FETCH2;
-         if (NILP (POP))
-           {
-             BYTE_CODE_QUIT;
-             CHECK_RANGE (op);
-             stack.pc = stack.byte_string_start + op;
-           }
-         break;
+         {
+           Lisp_Object v1;
+           MAYBE_GC ();
+           op = FETCH2;
+           v1 = POP;
+           if (NILP (v1))
+             {
+               BYTE_CODE_QUIT;
+               CHECK_RANGE (op);
+               stack.pc = stack.byte_string_start + op;
+             }
+           break;
+         }
 
        case Bcar:
          {
@@ -730,15 +734,19 @@ If the third argument is incorrect, Emacs may crash.  */)
          break;
 
        case Bgotoifnonnil:
-         MAYBE_GC ();
-         op = FETCH2;
-         if (!NILP (POP))
-           {
-             BYTE_CODE_QUIT;
-             CHECK_RANGE (op);
-             stack.pc = stack.byte_string_start + op;
-           }
-         break;
+         {
+           Lisp_Object v1;
+           MAYBE_GC ();
+           op = FETCH2;
+           v1 = POP;
+           if (!NILP (v1))
+             {
+               BYTE_CODE_QUIT;
+               CHECK_RANGE (op);
+               stack.pc = stack.byte_string_start + op;
+             }
+           break;
+         }
 
        case Bgotoifnilelsepop:
          MAYBE_GC ();
@@ -771,24 +779,32 @@ If the third argument is incorrect, Emacs may crash.  */)
          break;
 
        case BRgotoifnil:
-         MAYBE_GC ();
-         if (NILP (POP))
-           {
-             BYTE_CODE_QUIT;
-             stack.pc += (int) *stack.pc - 128;
-           }
-         stack.pc++;
-         break;
+         {
+           Lisp_Object v1;
+           MAYBE_GC ();
+           v1 = POP;
+           if (NILP (v1))
+             {
+               BYTE_CODE_QUIT;
+               stack.pc += (int) *stack.pc - 128;
+             }
+           stack.pc++;
+           break;
+         }
 
        case BRgotoifnonnil:
-         MAYBE_GC ();
-         if (!NILP (POP))
-           {
-             BYTE_CODE_QUIT;
-             stack.pc += (int) *stack.pc - 128;
-           }
-         stack.pc++;
-         break;
+         {
+           Lisp_Object v1;
+           MAYBE_GC ();
+           v1 = POP;
+           if (!NILP (v1))
+             {
+               BYTE_CODE_QUIT;
+               stack.pc += (int) *stack.pc - 128;
+             }
+           stack.pc++;
+           break;
+         }
 
        case BRgotoifnilelsepop:
          MAYBE_GC ();