diff options
author | Mike Pall <mike> | 2024-07-04 00:03:40 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2024-07-04 00:03:40 +0200 |
commit | 444c8ff19a39248307a7037354d6d259cc0e5efc (patch) | |
tree | 48fe86759b3b12514dc0875f6a6df030a7ddcbb3 | |
parent | 747fc02eb97f0c12e08723df788fd20a2f449397 (diff) | |
download | luajit-444c8ff19a39248307a7037354d6d259cc0e5efc.tar.gz luajit-444c8ff19a39248307a7037354d6d259cc0e5efc.tar.bz2 luajit-444c8ff19a39248307a7037354d6d259cc0e5efc.zip |
Clarify that lj_buf_shrink() does not keep any buffer data.
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.
-rw-r--r-- | src/lj_buf.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/src/lj_buf.c b/src/lj_buf.c index ae2ccd82..702c5a40 100644 --- a/src/lj_buf.c +++ b/src/lj_buf.c | |||
@@ -92,10 +92,8 @@ void LJ_FASTCALL lj_buf_shrink(lua_State *L, SBuf *sb) | |||
92 | char *b = sb->b; | 92 | char *b = sb->b; |
93 | MSize osz = (MSize)(sb->e - b); | 93 | MSize osz = (MSize)(sb->e - b); |
94 | if (osz > 2*LJ_MIN_SBUF) { | 94 | if (osz > 2*LJ_MIN_SBUF) { |
95 | MSize n = (MSize)(sb->w - b); | ||
96 | b = lj_mem_realloc(L, b, osz, (osz >> 1)); | 95 | b = lj_mem_realloc(L, b, osz, (osz >> 1)); |
97 | sb->b = b; | 96 | sb->w = sb->b = b; /* Not supposed to keep data across shrinks. */ |
98 | sb->w = b + n; | ||
99 | sb->e = b + (osz >> 1); | 97 | sb->e = b + (osz >> 1); |
100 | } | 98 | } |
101 | lj_assertG_(G(sbufL(sb)), !sbufisext(sb), "YAGNI shrink SBufExt"); | 99 | lj_assertG_(G(sbufL(sb)), !sbufisext(sb), "YAGNI shrink SBufExt"); |