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 <r...@pobox.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);
-- 
2.43.0

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to