From d83d12899b8b3a95f695eed4eb35b29d4a9ea551 Mon Sep 17 00:00:00 2001 From: link2xt Date: Sun, 21 Jun 2020 13:49:45 +0300 Subject: [PATCH] MOVE: do not crash when u is 0 (#126) This commit adds ?DUP IF guards to MOVE and MOVE- that make them exit when u is 0. Without these guards a DO loop was executed 65535 times instead of 0. In particular, this fixes a crash when "105 LOAD I " is executed immediately after boot. Block editor word "I" passes IBUF length (0) to MOVE- and MOVE in this case, causing a crash. --- blk/370 | 8 ++++---- emul/forth.bin | Bin 6183 -> 6195 bytes 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/blk/370 b/blk/370 index 49faaa4..245eae5 100644 --- a/blk/370 +++ b/blk/370 @@ -1,15 +1,15 @@ : MOVE ( a1 a2 u -- ) - ( u ) 0 DO ( a1 a2 ) + ?DUP IF ( u ) 0 DO ( a1 a2 ) SWAP C@+ ( a2 a1+1 x ) ROT C!+ ( a1+1 a2+1 ) - LOOP 2DROP ; + LOOP THEN 2DROP ; : MOVE- ( a1 a2 u -- ) - TUCK + 1- ( a1 u a2+u-1 ) + ?DUP IF TUCK + 1- ( a1 u a2+u-1 ) ROT 2 PICK + 1- ( u a2+u-1 a1+u-1 ) ROT ( u ) 0 DO ( a2 a1 ) C@- ( a2 a1-1 x ) ROT C!- ( a1-1 a2-1 ) SWAP ( a2 a1 ) - LOOP 2DROP ; + LOOP THEN 2DROP ; : MOVE, ( a u -- ) H@ OVER ALLOT SWAP MOVE ; : PREV 3 - DUP @ - ; diff --git a/emul/forth.bin b/emul/forth.bin index 95273dc47862d916699ee33a829f55ca2ec63c86..70d1e8d781890e40f99c4e57322f665cd3c97a0a 100644 GIT binary patch delta 1193 zcmYjQZ)jUp6hHU9m;ZTxlb0;RXw$H_#JFZcHf>Ye<|XOOe6=-6%gQQqj1s5oR@PCm zBAqhzgD@y}$Uc=0vErAEMIE&L5Jcv;G1ywzx5B>2T&Ey)3@gTSU#j@vy?4(&=lt&P zob$V1AN=;9=g0R5u;=d^o`T=Gm#cvWbjTm^c7TI0(*XL8{{YF*tNsjGrnmi_#y!6Y z`EoH=EsEeIPyJ2c;E>mZv0S;7Gp%9(+{7(XT|DG^QT)KMz^~Fb#0iI6jCn89hIoba z(<9Qp`Lwja-xZ?xHNmuAi|qq}M5RSu#P=at5t!eEL2I<~>K-JM#_bvi@VR7%52zUK z;aEb=Spz4eITMy8wzI(hB{GOMY|OyqTf1n9$*I#9k}}d>p^v0qWRj56_&p|{n*0NS z6VvBUpS_Um02e8^R)lY$;A+Sh;m;OBH!C`DqzP_l$R=2WKHKuzR=(V}#9hl86d6Bd z2O}#Zc`xvo*Z~dNp+rf9_9-v$8?r&Cl%uIDiifK^UUK~^WV!2DaaZSa@G-fmG+{%I zVOw+NaJky4!l&dueV~jd8uDGC#P48M6S`skzv3Hm1-4oy^mhRvi+m3~rS^5rstuXF z2zxAI^93@+FR4qa2`3~BWGFpI+QTiW2EC)|4(2rILp7CTr9Wt86cY-gLn9}#pdC4j z@ot#nv#1RLHU-wC+w>L9a6Fa`*fTReyPRcS2YIi1vVcy&Zh|?c(@NWHmxzu z#C3!ItQ`>7v?e&C`{|uP#GcmgtqlDwFyJ+mb>PmuyCG+2cknQRP6y-hRjD5#y5KnKvI%2B zRt;O<5}HVhtt5Ign3`XeDtOQ~{OjMg1!fKB3aQH|D5kq4KNm!1xK&ngYZK?kXnD9E zHKWW0FTyrX!*-{lsJM1Y)|PA%`}eGlvmJPTk1dTpJerwIMdSJ+Pv6obWR}k9&-iNk z6OwXm;c=JfH9bHi`n^7sXUzS(Rjl#jI;-Y7Ka2nWRT7*Dtb=f3=KYy_{&n!?&z(7Q za(ZTRxPm=VnzR^7kPUh^w4Y4SFG6YZl>QWolREt+l*&$ovK+gAMXQ1r`Vy+Q0x>VU z>Oc7QhU*Ry=~|^~Z^ZVkqtD~>aBDb}WjYd$=O#i-yQ8mHOI8Rz!Sou2)EzJLZO3s9 kJ|Ysf?@cF)u-)AJ@X$!fDoXGfx$mpf@4|7w3ODhooi92 zLgNq>^rd`#&^`2_jL3XQkv$c`Yn3qyzF7LOv4^s~O+qVkW}=gLzMCRm`0oAwobx-s zbH3lXH;;dP-1XDD1laTFTUS~PZ3;Ia!KIxI@~X1}jpmn}3Hic!rY{H%Lf;YlNSt05 z2gx;hSM2J!Et-%jWs+kV3ED_qw19&XZWG3nrEJp7WjxSMo{BUqop5$bA2?R{8a*$a zb37Hp?yK~BX_XAnvfRBKkyrQ~LBqERX71&1HwZ+N*LZ^CA=wnzxd|h=v*k0LNF##V z(;&dIY?}{jXzt>e!*ts;v_U^|z9zGs75+DgL9}4QJ?MPv5Y3pHn^}q~NPCk$k%y4U zpwf@;HGI6{QuHV|N!rP(l6F>=3jEb%=w{gm9I>Dss)`A@kq&$1wpXcA zYb717aw8J*`$suI%W^U01|A)cLX{pM?#>3DPU-XzVl9#nl`yIQNAFw}BbQ zyPkuq8H3qWxAn<$rtn& z-6y@Rv)dZgO$<_{zw3R{hHilaE@L8%<^k>V7(}Dvo-?VZm4{IthB}|+2k1S|5&O0tH4XZ=XV@K7cY#}YYg;jB#(NS$KlDZ-HF*Fb z;xK`_v|!ZB*t7X9!9rSW#?c?WF;b)Z-e=QHUQvGDiv$YEbV)@i?cp`uz=$p`t{LjQ zw*rr`==O0egu-gMBy43yu`D_*`Z`IT&iI}gn)S7GnPkl+BUr2PTwEQaO!yik=47+? zd=>cBZbD;ja%Mi-i?AHs^5s*EuXxD)J3jAYIc)H=`28P$@3dzZgbRyT7H^BY;7%=E zyf}GjajHoU1Aw(-ZP*)oLP ztiiWBWO_Of!e79-Km