diff options
author | Mike Pall <mike> | 2022-03-07 15:46:51 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2022-03-07 15:46:51 +0100 |
commit | aa0550e3f0999cc6ef62f7ef80493ebef8c9a2f7 (patch) | |
tree | ee17c4677ffdf5a12c2fd6572df77b65f4fbef64 /src | |
parent | f004a51b3abf7c7ed191bf87b9e163ea8112280a (diff) | |
download | luajit-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.c | 4 |
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 | } |