From: Aki Tuomi Date: Mon, 3 Oct 2022 15:45:36 +0000 (+0300) Subject: lib-dns: dns-lua - Return error correctly X-Git-Tag: 2.4.0~3584 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7045e226957fef5980bbdd9a749ec3f143f241ab;p=thirdparty%2Fdovecot%2Fcore.git lib-dns: dns-lua - Return error correctly Code was checking wrong place in stack, and thus only returned top of stack. Check the right place for error. Broken in a4e3ea5089400ab2037d3bdd0daa0ed351c1be46 --- diff --git a/src/lib-dns/dns-lua.c b/src/lib-dns/dns-lua.c index 0ed7c43494..946cca9447 100644 --- a/src/lib-dns/dns-lua.c +++ b/src/lib-dns/dns-lua.c @@ -31,7 +31,7 @@ static int lua_dns_client_async_continue(lua_State *L, int status ATTR_UNUSED, lua_KContext ctx ATTR_UNUSED) { - if (lua_isnil(L, -1)) + if (lua_isnil(L, -3)) return 3; else return 1; @@ -56,7 +56,7 @@ lua_dns_client_lookup_callback(const struct dns_lookup_result *result, } if (lua_lookup->resume) - dlua_pcall_yieldable_resume(L, 1); + dlua_pcall_yieldable_resume(L, result->ret == 0 ? 1 : 3); i_free(lua_lookup); } diff --git a/src/lib-lua/test-dns-lua.c b/src/lib-lua/test-dns-lua.c index fd43dd036c..3aa4b5de03 100644 --- a/src/lib-lua/test-dns-lua.c +++ b/src/lib-lua/test-dns-lua.c @@ -141,6 +141,10 @@ static void test_dns_lua(void) " assert(#arr == 2)\n" " assert(arr[1] == '127.0.0.1')\n" " assert(arr[2] == '127.0.0.2')\n" +" local arr, error, errno = client:lookup('invalid..name')\n" +" assert(arr == nil)\n" +" assert(errno == -4)\n" +" assert(error == \"Unknown host\")\n" "end\n"; test_begin("dns lua lookup");