Browse Source

Fix string buffer COW handling, part 2.

Reported by XmiliaH.
Mike Pall 3 years ago
parent
commit
aa0550e3f0
1 changed files with 3 additions and 1 deletions
  1. 3 1
      src/lib_buffer.c

+ 3 - 1
src/lib_buffer.c

@@ -76,6 +76,8 @@ LJLIB_CF(buffer_method_skip)		LJLIB_REC(.)
   MSize len = sbufxlen(sbx);
   if (n < len) {
     sbx->r += n;
+  } else if (sbufiscow(sbx)) {
+    sbx->r = sbx->w;
   } else {
     sbx->r = sbx->w = sbx->b;
   }
@@ -173,7 +175,7 @@ LJLIB_CF(buffer_method_get)		LJLIB_REC(.)
     setstrV(L, o, lj_str_new(L, sbx->r, n));
     sbx->r += n;
   }
-  if (sbx->r == sbx->w) sbx->r = sbx->w = sbx->b;
+  if (sbx->r == sbx->w && !sbufiscow(sbx)) sbx->r = sbx->w = sbx->b;
   lj_gc_check(L);
   return narg-1;
 }