aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKen Raeburn2005-12-06 07:39:05 +0000
committerKen Raeburn2005-12-06 07:39:05 +0000
commit21ed6de35b788d80e8d65cccc5ccff1b8b93b140 (patch)
tree1febfd4da2c1245caadaa30cb8c2f8ad7fdcdc55 /src
parent09706e1fc4ce4fa2b947d690aae11be8274b0642 (diff)
downloademacs-21ed6de35b788d80e8d65cccc5ccff1b8b93b140.tar.gz
emacs-21ed6de35b788d80e8d65cccc5ccff1b8b93b140.zip
(Fbyte_code): Avoid dangerous side effects in NILP argument.
Diffstat (limited to 'src')
-rw-r--r--src/bytecode.c84
1 files changed, 50 insertions, 34 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index e23d835cf10..af09061dbc3 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -524,15 +524,19 @@ If the third argument is incorrect, Emacs may crash. */)
524 } 524 }
525 525
526 case Bgotoifnil: 526 case Bgotoifnil:
527 MAYBE_GC (); 527 {
528 op = FETCH2; 528 Lisp_Object v1;
529 if (NILP (POP)) 529 MAYBE_GC ();
530 { 530 op = FETCH2;
531 BYTE_CODE_QUIT; 531 v1 = POP;
532 CHECK_RANGE (op); 532 if (NILP (v1))
533 stack.pc = stack.byte_string_start + op; 533 {
534 } 534 BYTE_CODE_QUIT;
535 break; 535 CHECK_RANGE (op);
536 stack.pc = stack.byte_string_start + op;
537 }
538 break;
539 }
536 540
537 case Bcar: 541 case Bcar:
538 { 542 {
@@ -730,15 +734,19 @@ If the third argument is incorrect, Emacs may crash. */)
730 break; 734 break;
731 735
732 case Bgotoifnonnil: 736 case Bgotoifnonnil:
733 MAYBE_GC (); 737 {
734 op = FETCH2; 738 Lisp_Object v1;
735 if (!NILP (POP)) 739 MAYBE_GC ();
736 { 740 op = FETCH2;
737 BYTE_CODE_QUIT; 741 v1 = POP;
738 CHECK_RANGE (op); 742 if (!NILP (v1))
739 stack.pc = stack.byte_string_start + op; 743 {
740 } 744 BYTE_CODE_QUIT;
741 break; 745 CHECK_RANGE (op);
746 stack.pc = stack.byte_string_start + op;
747 }
748 break;
749 }
742 750
743 case Bgotoifnilelsepop: 751 case Bgotoifnilelsepop:
744 MAYBE_GC (); 752 MAYBE_GC ();
@@ -771,24 +779,32 @@ If the third argument is incorrect, Emacs may crash. */)
771 break; 779 break;
772 780
773 case BRgotoifnil: 781 case BRgotoifnil:
774 MAYBE_GC (); 782 {
775 if (NILP (POP)) 783 Lisp_Object v1;
776 { 784 MAYBE_GC ();
777 BYTE_CODE_QUIT; 785 v1 = POP;
778 stack.pc += (int) *stack.pc - 128; 786 if (NILP (v1))
779 } 787 {
780 stack.pc++; 788 BYTE_CODE_QUIT;
781 break; 789 stack.pc += (int) *stack.pc - 128;
790 }
791 stack.pc++;
792 break;
793 }
782 794
783 case BRgotoifnonnil: 795 case BRgotoifnonnil:
784 MAYBE_GC (); 796 {
785 if (!NILP (POP)) 797 Lisp_Object v1;
786 { 798 MAYBE_GC ();
787 BYTE_CODE_QUIT; 799 v1 = POP;
788 stack.pc += (int) *stack.pc - 128; 800 if (!NILP (v1))
789 } 801 {
790 stack.pc++; 802 BYTE_CODE_QUIT;
791 break; 803 stack.pc += (int) *stack.pc - 128;
804 }
805 stack.pc++;
806 break;
807 }
792 808
793 case BRgotoifnilelsepop: 809 case BRgotoifnilelsepop:
794 MAYBE_GC (); 810 MAYBE_GC ();