]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Clarify that lj_buf_shrink() does not keep any buffer data.
authorMike Pall <mike>
Wed, 3 Jul 2024 22:03:40 +0000 (00:03 +0200)
committerMike Pall <mike>
Wed, 3 Jul 2024 22:03:40 +0000 (00:03 +0200)
https://www.freelists.org/post/luajit/lj-buf-shrink-may-truncate-the-data-and-sbw-point-over-the-end-of-the-buffer,1
Thanks to Junlong li.

src/lj_buf.c

index ae2ccd82d1c235d06ab3bae1930dc03748add75f..702c5a409ba27a1f4368c8698e740ecb71c7bc96 100644 (file)
@@ -92,10 +92,8 @@ void LJ_FASTCALL lj_buf_shrink(lua_State *L, SBuf *sb)
   char *b = sb->b;
   MSize osz = (MSize)(sb->e - b);
   if (osz > 2*LJ_MIN_SBUF) {
-    MSize n = (MSize)(sb->w - b);
     b = lj_mem_realloc(L, b, osz, (osz >> 1));
-    sb->b = b;
-    sb->w = b + n;
+    sb->w = sb->b = b;  /* Not supposed to keep data across shrinks. */
     sb->e = b + (osz >> 1);
   }
   lj_assertG_(G(sbufL(sb)), !sbufisext(sb), "YAGNI shrink SBufExt");