diff --git a/app/lua/liolib.c b/app/lua/liolib.c index 03e67beb..4ac31fe4 100644 --- a/app/lua/liolib.c +++ b/app/lua/liolib.c @@ -343,28 +343,19 @@ static int read_line (lua_State *L, int f) { static int read_line (lua_State *L, int f) { luaL_Buffer b; luaL_buffinit(L, &b); - char *p = luaL_prepbuffer(&b); - signed char c = EOF; - int i = 0; - do{ + signed char c; + do { c = (signed char)vfs_getc(f); - if(c==EOF){ + if (c==EOF) { break; } - p[i++] = c; - }while((c!=EOF) && (c!='\n') && (i0 && p[i-1] == '\n') - i--; /* do not include `eol' */ - - if(i==0){ - luaL_pushresult(&b); /* close buffer */ - return (lua_objlen(L, -1) > 0); /* check whether read something */ - } - - luaL_addsize(&b, i); luaL_pushresult(&b); /* close buffer */ - return 1; /* read at least an `eol' */ + return (lua_objlen(L, -1) > 0); /* check whether read something */ } #endif diff --git a/app/lua/luaconf.h b/app/lua/luaconf.h index 01c052a2..34f0471f 100644 --- a/app/lua/luaconf.h +++ b/app/lua/luaconf.h @@ -556,7 +556,7 @@ extern int readline4lua(const char *prompt, char *buffer, int length); ** For example: If set to 4K a call to string.gsub will need more than ** 5k C stack space. */ -#define LUAL_BUFFERSIZE BUFSIZ +#define LUAL_BUFFERSIZE 256 /* }================================================================== */ diff --git a/app/modules/ow.c b/app/modules/ow.c index 6ce773bf..9fec9bc9 100644 --- a/app/modules/ow.c +++ b/app/modules/ow.c @@ -134,6 +134,8 @@ static int ow_read_bytes( lua_State *L ) if( size == 0 ) return 0; + luaL_argcheck(L, size <= LUAL_BUFFERSIZE, 2, "Attempt to read too many characters"); + luaL_Buffer b; luaL_buffinit( L, &b ); char *p = luaL_prepbuffer(&b); diff --git a/docs/en/modules/ow.md b/docs/en/modules/ow.md index 4cc23462..459ba831 100644 --- a/docs/en/modules/ow.md +++ b/docs/en/modules/ow.md @@ -84,7 +84,7 @@ Reads multi bytes. #### Parameters - `pin` 1~12, I/O index -- `size` number of bytes to be read from slave device +- `size` number of bytes to be read from slave device (up to 256) #### Returns `string` bytes read from slave device