range check char length

This commit is contained in:
andromeda
2026-03-18 16:21:34 +01:00
parent 17a0a1a406
commit de60e52c5a
2 changed files with 12 additions and 2 deletions

View File

@@ -866,7 +866,8 @@ evaluate_constant:
jmp .bin_loop
.chr:
; TODO range check rcx
cmp rcx, 4 ; ensure char is only 4 bytes long
jg .unrecognised
cmp rsi, 1 ; range check
je .chr_break
@@ -896,7 +897,7 @@ evaluate_constant:
jmp .chr_break
.chr_break_for_good:
mov dl, [rdi]
mov dl, [rdi] ; make sure the chr is closed
cmp dl, '"'
jne .unrecognised

View File

@@ -377,6 +377,13 @@ test_evaluate_constant:
cmp rdx, 0x03
jne .fail
; oversized char
mov rdi, .case1c
mov rsi, 7
call evaluate_constant
cmp rdx, 0xFF
jne .fail
.pass:
mov rsi, msg_pass
call print
@@ -396,6 +403,8 @@ test_evaluate_constant:
.case3h_solution dq 0x243F6A8885A308D3
.case0c db '"char"'
.case0c_solution dq "char"
.case1c db '"chars"'
.case1c_solution dq "chars"
.case0q db "0q31103755242102"
.case0q_solution dq 0q31103755242102