]> source.dussan.org Git - rspamd.git/commitdiff
Fix stupid bug with lua stack corruption.
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 14 Oct 2011 18:22:29 +0000 (21:22 +0300)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Fri, 14 Oct 2011 18:22:29 +0000 (21:22 +0300)
src/lua/lua_classifier.c
src/lua/lua_common.c

index 32d4f88ed35d3f92e58bcd5a9e79cdf42cc7cd66..0bf0daca8f91ae2d4d13e80b08861efaacd0ff6c 100644 (file)
@@ -109,7 +109,6 @@ call_classifier_pre_callback (struct classifier_config *ccf, struct worker_task
                                lua_pop (L, 1);
                        }
                }
-               lua_pop (L, 1);
        }
 
        return res;
index 67206b8ef3da10e3699752ca5223594f6371539f..990be90ef54d73192feb43c734d57b50776fd11d 100644 (file)
@@ -384,12 +384,15 @@ lua_call_expression_func (const gchar *module, const gchar *function,
                        lua_pop (L, 1);
                        lua_getglobal (L, function);
                }
-               else {
+               else if (lua_istable (L, -1)) {
                        /* Call local function in table */
                        lua_pushstring (L, function);
                        lua_gettable (L, -2);
                        pop += 2;
                }
+               else {
+                       msg_err ("Bad type: %s for function: %s for module: %s", lua_typename (L, lua_type (L, -1)), function, module);
+               }
        }
        else {
                /* Try to get global variable */
@@ -441,6 +444,8 @@ lua_call_expression_func (const gchar *module, const gchar *function,
                return FALSE;
        }
        *res = lua_toboolean (L, -1);
+       lua_gc (L, LUA_GCCOLLECT, 0);
+       msg_info ("lua eats %d kbytes", lua_gc (L, LUA_GCCOUNT, 0));
        lua_pop (L, pop);
 
        return TRUE;