diff options
author | Ron Yorston | 2024-01-19 15:41:17 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer | 2024-03-02 17:03:37 +0100 |
commit | e1a68741067167dc4837e0a26d3d5c318a631fc7 (patch) | |
tree | 06fa438bd54e18aee5e7446c0529455f4b9e8b08 | |
parent | 01f2b5976d03fb50229d28297cf5ebd8be533203 (diff) | |
download | busybox-e1a68741067167dc4837e0a26d3d5c318a631fc7.zip busybox-e1a68741067167dc4837e0a26d3d5c318a631fc7.tar.gz |
awk: fix segfault when compiled by clang
A 32-bit build of BusyBox using clang segfaulted in the test
"awk assign while assign". Specifically, on line 7 of the test
input where the adjustment of the L.v pointer when the Fields
array was reallocated
L.v += Fields - old_Fields_ptr;
was out by 4 bytes.
Rearrange to code so both gcc and clang generate code that works.
Signed-off-by: Ron Yorston <rmy@pobox.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
-rw-r--r-- | editors/awk.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/editors/awk.c b/editors/awk.c index aa485c7..0981c67 100644 --- a/editors/awk.c +++ b/editors/awk.c @@ -3006,7 +3006,7 @@ static var *evaluate(node *op, var *res) if (old_Fields_ptr) { //if (old_Fields_ptr != Fields) // debug_printf_eval("L.v moved\n"); - L.v += Fields - old_Fields_ptr; + L.v = Fields + (L.v - old_Fields_ptr); } if (opinfo & OF_STR2) { R.s = getvar_s(R.v); |