aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2022-03-07 15:46:51 +0100
committerMike Pall <mike>2022-03-07 15:46:51 +0100
commitaa0550e3f0999cc6ef62f7ef80493ebef8c9a2f7 (patch)
treeee17c4677ffdf5a12c2fd6572df77b65f4fbef64 /src
parentf004a51b3abf7c7ed191bf87b9e163ea8112280a (diff)
downloadluajit-aa0550e3f0999cc6ef62f7ef80493ebef8c9a2f7.tar.gz
luajit-aa0550e3f0999cc6ef62f7ef80493ebef8c9a2f7.tar.bz2
luajit-aa0550e3f0999cc6ef62f7ef80493ebef8c9a2f7.zip
Fix string buffer COW handling, part 2.
Reported by XmiliaH.
Diffstat (limited to 'src')
-rw-r--r--src/lib_buffer.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lib_buffer.c b/src/lib_buffer.c
index 9aa725b6..e3d24504 100644
--- a/src/lib_buffer.c
+++ b/src/lib_buffer.c
@@ -76,6 +76,8 @@ LJLIB_CF(buffer_method_skip) LJLIB_REC(.)
76 MSize len = sbufxlen(sbx); 76 MSize len = sbufxlen(sbx);
77 if (n < len) { 77 if (n < len) {
78 sbx->r += n; 78 sbx->r += n;
79 } else if (sbufiscow(sbx)) {
80 sbx->r = sbx->w;
79 } else { 81 } else {
80 sbx->r = sbx->w = sbx->b; 82 sbx->r = sbx->w = sbx->b;
81 } 83 }
@@ -173,7 +175,7 @@ LJLIB_CF(buffer_method_get) LJLIB_REC(.)
173 setstrV(L, o, lj_str_new(L, sbx->r, n)); 175 setstrV(L, o, lj_str_new(L, sbx->r, n));
174 sbx->r += n; 176 sbx->r += n;
175 } 177 }
176 if (sbx->r == sbx->w) sbx->r = sbx->w = sbx->b; 178 if (sbx->r == sbx->w && !sbufiscow(sbx)) sbx->r = sbx->w = sbx->b;
177 lj_gc_check(L); 179 lj_gc_check(L);
178 return narg-1; 180 return narg-1;
179} 181}