Browse code

asma fix: disallow 1 and 3 chars in hex literals and raw hex

Andrew Alderwick authored on 03/11/2021 19:38:02
Showing 2 changed files
... ...
@@ -46,6 +46,18 @@ EOD
46 46
 expect_failure 'Invalid hexadecimal: #' <<'EOD'
47 47
 |1000 #
48 48
 EOD
49
+expect_failure 'Invalid hexadecimal: #0' <<'EOD'
50
+|1000 #0
51
+EOD
52
+expect_failure 'Invalid hexadecimal: #000' <<'EOD'
53
+|1000 #000
54
+EOD
55
+expect_failure 'Unrecognised token: 0' <<'EOD'
56
+|1000 0
57
+EOD
58
+expect_failure 'Unrecognised token: 000' <<'EOD'
59
+|1000 000
60
+EOD
49 61
 expect_failure 'Address not in zero page: .hello' <<'EOD'
50 62
 |1000 @hello
51 63
 	.hello
... ...
@@ -371,13 +371,14 @@ include projects/library/file-read-chunks.tal
371 371
 	#57 SUB
372 372
 	JMP2r
373 373
 
374
-@asma-parse-hex-string ( -- value* 06 if valid hex and 2 < length <= 4
375
-                         OR value* 03 if valid hex and length <= 2
376
-                         OR 00 otherwise )
374
+@asma-parse-hex-string ( strict -- value* 06 if valid hex and (length == 4 or (length == 3 and not strict))
375
+                                OR value* 03 if valid hex and (length == 2 or (length == 1 and not strict))
376
+                                OR 00 otherwise )
377
+	STH
377 378
 	;asma/token LDA2 DUP2 ,strlen JSR ( token* length^ )
379
+	DUP STHr AND ,&fail2 JCN
378 380
 	DUP2 #0004 GTH2 ,&fail2 JCN
379 381
 	ORAk #00 EQU ,&fail2 JCN
380
-	&resume
381 382
 	#0002 GTH2 ROT ROT
382 383
 	LIT2r 0000
383 384
 
... ...
@@ -624,7 +625,7 @@ include projects/library/heap.tal
624 625
 	( fall through )
625 626
 
626 627
 @asma-pad-helper ( offset* -- )
627
-	;asma-parse-hex-string JSR2
628
+	#00 ;asma-parse-hex-string JSR2
628 629
 	,&valid JCN
629 630
 
630 631
 	;asma-msg-hex ;asma/error STA2
... ...
@@ -740,7 +741,7 @@ include projects/library/heap.tal
740 741
 	JMP2r
741 742
 
742 743
 @asma-literal-hex
743
-	;asma-parse-hex-string JSR2 JMP
744
+	#01 ;asma-parse-hex-string JSR2 JMP
744 745
 	( hex invalid ) ,&invalid JMP
745 746
 	( hex byte    ) ,asma-byte-helper JMP
746 747
 	( hex short   ) ,asma-short-helper JMP
... ...
@@ -766,7 +767,7 @@ include projects/library/heap.tal
766 767
 	;asma-write-byte JMP2 ( tail call )
767 768
 
768 769
 	&not-opcode
769
-	;asma-parse-hex-string JSR2 JMP
770
+	#01 ;asma-parse-hex-string JSR2 JMP
770 771
 	( hex invalid ) ,&not-hex JMP
771 772
 	( hex byte    ) ,asma-byte-helper/raw JMP
772 773
 	( hex short   ) ,asma-short-helper/raw JMP