From 5a2867cbb96e1eb5abb17aac3992a4aba8d4d912 Mon Sep 17 00:00:00 2001 From: crc <> Date: Tue, 6 Aug 2024 13:32:00 +0000 Subject: [PATCH] [nga-c] now truncate input tokens from files where the token is bigger than the TIB. Ensure the token is null terminated if truncated. FossilOrigin-Name: b8175efce9504446dadb958daf9d8f16a53c95d54fa01f35e3b6566f34919f92 --- RELEASE-NOTES | 2 + image/retro.forth | 6 +- ngaImage | Bin 93344 -> 93648 bytes vm/nga-c/image.c | 1870 +++++++++++++++++++++++---------------------- vm/nga-c/retro.c | 4 + 5 files changed, 947 insertions(+), 935 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index ed5f0ca..93bc688 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -55,6 +55,8 @@ - now report "" for `script:name` if no file is being run - now report 0 for `script:arguments` if not running a program + - source read from a file now truncates (w/null termination) + input tokens bigger than the defined text input buffer Future Notes diff --git a/image/retro.forth b/image/retro.forth index 00d7006..98f17a9 100644 --- a/image/retro.forth +++ b/image/retro.forth @@ -852,8 +852,12 @@ variables. :s:next (-) &Current v:inc @Current @TempStrings eq? [ #0 !Current ] if ; + :truncate (s-s) + dup s:length @TempStringMax n:dec gt? + [ #0 over @TempStringMax + store ] if ; ---reveal--- - :s:temp (s-s) dup s:length n:inc s:pointer swap copy + :s:temp (s-s) truncate + dup s:length n:inc s:pointer swap copy s:pointer s:next ; :s:empty (-s) s:pointer s:next #0 over store ; }} diff --git a/ngaImage b/ngaImage index b218944a16863e99b178f878316abd16a380f32d..f0de021e79efa7da217343744c783926e5b35346 100644 GIT binary patch delta 10921 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[vm->active] #define TIB vm->memory[7] +#define TIB_END vm->memory[8] #define MAX_DEVICES 32 #define MAX_OPEN_FILES 32 @@ -707,6 +708,9 @@ V execute(NgaState *vm, CELL cell) { V evaluate(NgaState *vm, char *s) { if (strlen(s) == 0) return; + if (strlen(s) > (TIB_END - TIB)) { + s[TIB_END - TIB] = 0; + } string_inject(vm, s, TIB); stack_push(vm, TIB); execute(vm, vm->interpret);