From de60e52c5af08d57cf83b5b110ec19562aa41b17 Mon Sep 17 00:00:00 2001 From: andromeda Date: Wed, 18 Mar 2026 16:21:34 +0100 Subject: [PATCH] range check char length --- twasm/asm/main.asm | 5 +++-- twasm/asm/tests.asm | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/twasm/asm/main.asm b/twasm/asm/main.asm index f4f13af..ead107e 100644 --- a/twasm/asm/main.asm +++ b/twasm/asm/main.asm @@ -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 diff --git a/twasm/asm/tests.asm b/twasm/asm/tests.asm index df60eb4..c4cd545 100644 --- a/twasm/asm/tests.asm +++ b/twasm/asm/tests.asm @@ -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