diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2021-06-04 01:17:38 +0200 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2021-06-04 01:30:18 +0200 |
commit | 5167dad198508e2dac10bf89c6b2991cfc791ee6 (patch) | |
tree | 7dbab3e7047ce80e6651f238f95d241a6a460ad1 /src/parser.c | |
parent | ad392b343a59c6bd093a2bd352598f6e7747828e (diff) | |
download | sciteco-5167dad198508e2dac10bf89c6b2991cfc791ee6.tar.gz |
guard against too low arguments to <S> by checking whether the memory limit would be exceeded
* Checking whether the allocation succeeded may not prevent exceeding the memory
limit excessively.
* Even if the memory limit is not exceeded, the allocation can fail theoretically
and the program would terminate abnormally.
This however is true for all allocations in SciTECO (via glib).
* teco_memory_check() therefore now supports checking whether an allocation would
exceed the memory limit which will be useful before very large or variable allocations
in addition to the regular checking in teco_machine_main_step().
* As a sideeffect, this fixes the "Searching with large counts" test case on Mac OS
where too large allocations were not detected as expected (apparently Mac OS
happily gives out ridiculously large chunks of memory).
Now, all platforms are guaranteed to have the same behaviour.
Diffstat (limited to 'src/parser.c')
-rw-r--r-- | src/parser.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/parser.c b/src/parser.c index ff1fd18..22f7a4f 100644 --- a/src/parser.c +++ b/src/parser.c @@ -105,7 +105,11 @@ teco_machine_main_step(teco_machine_main_t *ctx, const gchar *macro, gint stop_p goto error_attach; } - if (!teco_memory_check(error)) + /* + * Most allocations are small or of limited size, + * so it is (almost) sufficient to check the memory limit regularily. + */ + if (!teco_memory_check(0, error)) goto error_attach; if (!teco_machine_input(&ctx->parent, macro[ctx->macro_pc], error)) |