aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2025-10-16 13:11:02 +0200
committerMike Pall <mike>2025-10-16 13:11:02 +0200
commit54a162688ed25902122077149df9b456bc5a763e (patch)
tree5806f7ed867c6a89e0f4522157fd74d5a56a1232 /src
parent871db2c84ecefd70a850e03a6c340214a81739f0 (diff)
downloadluajit-54a162688ed25902122077149df9b456bc5a763e.tar.gz
luajit-54a162688ed25902122077149df9b456bc5a763e.tar.bz2
luajit-54a162688ed25902122077149df9b456bc5a763e.zip
Fix reporting of an error during error handling.
Reported by Sergey Kaplun. #1381
Diffstat (limited to 'src')
-rw-r--r--src/lj_err.c10
-rw-r--r--src/lj_state.c1
2 files changed, 11 insertions, 0 deletions
diff --git a/src/lj_err.c b/src/lj_err.c
index 03b5030b..e8e18758 100644
--- a/src/lj_err.c
+++ b/src/lj_err.c
@@ -803,9 +803,17 @@ LJ_NOINLINE GCstr *lj_err_str(lua_State *L, ErrMsg em)
803 return lj_str_newz(L, err2msg(em)); 803 return lj_str_newz(L, err2msg(em));
804} 804}
805 805
806LJ_NORET LJ_NOINLINE static void lj_err_err(lua_State *L)
807{
808 setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRERR));
809 lj_err_throw(L, LUA_ERRERR);
810}
811
806/* Out-of-memory error. */ 812/* Out-of-memory error. */
807LJ_NOINLINE void lj_err_mem(lua_State *L) 813LJ_NOINLINE void lj_err_mem(lua_State *L)
808{ 814{
815 if (L->status == LUA_ERRERR)
816 lj_err_err(L);
809 if (L->status == LUA_ERRERR+1) /* Don't touch the stack during lua_open. */ 817 if (L->status == LUA_ERRERR+1) /* Don't touch the stack during lua_open. */
810 lj_vm_unwind_c(L->cframe, LUA_ERRMEM); 818 lj_vm_unwind_c(L->cframe, LUA_ERRMEM);
811 if (LJ_HASJIT) { 819 if (LJ_HASJIT) {
@@ -902,6 +910,8 @@ LJ_NOINLINE void LJ_FASTCALL lj_err_run(lua_State *L)
902/* Stack overflow error. */ 910/* Stack overflow error. */
903void LJ_FASTCALL lj_err_stkov(lua_State *L) 911void LJ_FASTCALL lj_err_stkov(lua_State *L)
904{ 912{
913 if (L->status == LUA_ERRERR)
914 lj_err_err(L);
905 lj_debug_addloc(L, err2msg(LJ_ERR_STKOV), L->base-1, NULL); 915 lj_debug_addloc(L, err2msg(LJ_ERR_STKOV), L->base-1, NULL);
906 lj_err_run(L); 916 lj_err_run(L);
907} 917}
diff --git a/src/lj_state.c b/src/lj_state.c
index d8fc545a..3cad8cc1 100644
--- a/src/lj_state.c
+++ b/src/lj_state.c
@@ -195,6 +195,7 @@ static TValue *cpluaopen(lua_State *L, lua_CFunction dummy, void *ud)
195 lj_meta_init(L); 195 lj_meta_init(L);
196 lj_lex_init(L); 196 lj_lex_init(L);
197 fixstring(lj_err_str(L, LJ_ERR_ERRMEM)); /* Preallocate memory error msg. */ 197 fixstring(lj_err_str(L, LJ_ERR_ERRMEM)); /* Preallocate memory error msg. */
198 fixstring(lj_err_str(L, LJ_ERR_ERRERR)); /* Preallocate err in err msg. */
198 g->gc.threshold = 4*g->gc.total; 199 g->gc.threshold = 4*g->gc.total;
199#if LJ_HASFFI 200#if LJ_HASFFI
200 lj_ctype_initfin(L); 201 lj_ctype_initfin(L);