[git commit] awk: fix segfault when compiled by clang
Bernhard Reutner-Fischer
rep.dot.nop at gmail.com
Sat Mar 2 16:03:37 UTC 2024
commit: https://git.busybox.net/busybox/commit/?id=e1a68741067167dc4837e0a26d3d5c318a631fc7
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
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 at pobox.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
editors/awk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/editors/awk.c b/editors/awk.c
index aa485c782..0981c6735 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);
More information about the busybox-cvs
mailing list