aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib_io.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lib_io.c b/src/lib_io.c
index e9472ba5..5369d450 100644
--- a/src/lib_io.c
+++ b/src/lib_io.c
@@ -17,6 +17,7 @@
17#include "lualib.h" 17#include "lualib.h"
18 18
19#include "lj_obj.h" 19#include "lj_obj.h"
20#include "lj_gc.h"
20#include "lj_err.h" 21#include "lj_err.h"
21#include "lj_buf.h" 22#include "lj_buf.h"
22#include "lj_str.h" 23#include "lj_str.h"
@@ -153,6 +154,7 @@ static int io_file_readline(lua_State *L, FILE *fp, MSize chop)
153 if (n >= m - 64) m += m; 154 if (n >= m - 64) m += m;
154 } 155 }
155 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); 156 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n));
157 lj_gc_check(L);
156 return (int)ok; 158 return (int)ok;
157} 159}
158 160
@@ -164,6 +166,7 @@ static void io_file_readall(lua_State *L, FILE *fp)
164 n += (MSize)fread(buf+n, 1, m-n, fp); 166 n += (MSize)fread(buf+n, 1, m-n, fp);
165 if (n != m) { 167 if (n != m) {
166 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); 168 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n));
169 lj_gc_check(L);
167 return; 170 return;
168 } 171 }
169 } 172 }
@@ -175,6 +178,7 @@ static int io_file_readlen(lua_State *L, FILE *fp, MSize m)
175 char *buf = lj_buf_tmp(L, m); 178 char *buf = lj_buf_tmp(L, m);
176 MSize n = (MSize)fread(buf, 1, m, fp); 179 MSize n = (MSize)fread(buf, 1, m, fp);
177 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); 180 setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n));
181 lj_gc_check(L);
178 return (n > 0 || m == 0); 182 return (n > 0 || m == 0);
179 } else { 183 } else {
180 int c = getc(fp); 184 int c = getc(fp);