diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-12-16 02:50:32 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-12-16 02:50:32 -0800 |
commit | 7c1b9d0b91295323b5ed5ec3e09b46566288bc75 (patch) | |
tree | f6a2955d3cec464ace740e88e215a201d6a87cbf | |
parent | b425593af6689c14e816dddc0e733636d78d99f1 (diff) | |
download | teliva-7c1b9d0b91295323b5ed5ec3e09b46566288bc75.tar.gz |
stop leaking on the Lua stack
..even if at the expense of leaking on the heap. Because the Lua stack has very limited space (~20 slots). When it overflows, we segfault.
-rw-r--r-- | src/kilo.c | 1 | ||||
-rw-r--r-- | src/lua.c | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/kilo.c b/src/kilo.c index 4a5bf52..f5cea3d 100644 --- a/src/kilo.c +++ b/src/kilo.c @@ -1080,6 +1080,7 @@ static int Quit = 0; static int Back_to_big_picture = 0; extern void save_editor_state(int rowoff, int coloff, int cy, int cx); static void editorProcessKeypress(lua_State* L) { + lua_settop(L, 0); /* big hammer to avoid overflowing the stack */ int c = getch(); //? mvprintw(LINES-3, 60, "key: %d\n", c); //? getch(); diff --git a/src/lua.c b/src/lua.c index ac6e249..834e547 100644 --- a/src/lua.c +++ b/src/lua.c @@ -901,10 +901,10 @@ int restore_editor_view (lua_State *L) { status = load_editor_buffer_to_current_definition_in_image(L); if (status == 0 || lua_isnil(L, -1)) break; - Previous_error = lua_tostring(L, -1); + Previous_error = strdup(lua_tostring(L, -1)); /* memory leak */ if (Previous_error == NULL) Previous_error = "(error object is not a string)"; - back_to_big_picture = resumeEdit(L); lua_pop(L, 1); + back_to_big_picture = resumeEdit(L); } return back_to_big_picture; } |