diff options
| author | andromeda <andromeda@lenovo> | 2026-03-18 16:21:34 +0100 |
|---|---|---|
| committer | andromeda <andromeda@lenovo> | 2026-03-18 16:21:34 +0100 |
| commit | de60e52c5af08d57cf83b5b110ec19562aa41b17 (patch) | |
| tree | 4c993f796d7a8e1bace0cb83ab65dec91cad235f | |
| parent | 17a0a1a406bb52bde8c1306cd7ff44c00acb84de (diff) | |
range check char length
| -rw-r--r-- | twasm/asm/main.asm | 5 | ||||
| -rw-r--r-- | 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 |
