From 146e63409107ddd7e172f70191bd360280fb9094 Mon Sep 17 00:00:00 2001 From: Minsoo Choo Date: Sat, 5 Sep 2026 11:22:32 -0400 Subject: [PATCH] PPC64: use pointer-width accesses when resetting string buffer The PPC string lower/upper/reverse fast-function wrapper resets SBuf::w from SBuf::b using lwz/stw. Both fields are char pointers, so these 32-bit accesses are incorrect on PPC64. This breaks the reset on big-endian PPC64, causing string.lower(), string.upper(), and string.reverse() to append to stale temporary buffer contents. Use lp/stp so the accesses have the target pointer width. --- src/vm_ppc.dasc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc index e4aaa7ebe..e5f157ec3 100644 --- a/src/vm_ppc.dasc +++ b/src/vm_ppc.dasc @@ -2700,11 +2700,11 @@ static void build_subroutines(BuildCtx *ctx) | checkstr CARG3 | la SBUF:CARG1, DISPATCH_GL(tmpbuf)(DISPATCH) | bne ->fff_fallback - | lwz TMP0, SBUF:CARG1->b + | lp TMP0, SBUF:CARG1->b | stw L, SBUF:CARG1->L | stp BASE, L->base | stw PC, SAVE_PC - | stw TMP0, SBUF:CARG1->w + | stp TMP0, SBUF:CARG1->w | bl extern lj_buf_putstr_ .. name | bl extern lj_buf_tostr | b ->fff_resstr