diff options
author | William Wilgus <me.theuser@yahoo.com> | 2018-11-02 14:13:27 -0400 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2018-11-02 23:18:30 -0400 |
commit | d9f9def505b367b9361ba96d33e6edf1687716fb (patch) | |
tree | 9fd2c48e10c8c193bb6f55fa077eddc237b717c2 | |
parent | f6e10b84882387e304467f22ea2f6126cbaa1264 (diff) |
Lua fix failure to read lines longer than LUAL_BUFFERSIZE
Readline didn't handle lines longer than LUAL_BUFFERSIZE it now
reads these in chunks.
Change-Id: Iffe12447e5441ff6b479ce3de1d36df64c276183
-rw-r--r-- | apps/plugins/lua/liolib.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/apps/plugins/lua/liolib.c b/apps/plugins/lua/liolib.c index 6744efedd5..fb6765492b 100644 --- a/apps/plugins/lua/liolib.c +++ b/apps/plugins/lua/liolib.c @@ -269,22 +269,19 @@ static int _read_line (lua_State *L, int *f) { luaL_buffinit(L, &b); for (;;) { size_t l; - off_t r; char *p = luaL_prepbuffer(&b); - r = rb->read_line(*f, p, LUAL_BUFFERSIZE); - l = strlen(p); - - if (l == 0 || p[l-1] != '\n') - luaL_addsize(&b, l); - else { - luaL_addsize(&b, l - 1); /* do not include `eol' */ + off_t r = rb->read_line(*f, p, LUAL_BUFFERSIZE); /* does not include `eol' */ + if (r <= 0) { /* eof? */ luaL_pushresult(&b); /* close buffer */ - return 1; /* read at least an `eol' */ - } - if (r < LUAL_BUFFERSIZE) { /* eof? */ - luaL_pushresult(&b); /* close buffer */ - return (r > 0); /* check whether read something */ + return (lua_objlen(L, -1) > 0); /* check whether read something */ } + l = strlen(p); + luaL_addsize(&b, l); + if(r >= LUAL_BUFFERSIZE - 1) + continue; /* more to read */ + + luaL_pushresult(&b); /* close buffer */ + return 1; /* we read at least 1 character */ } } |