diff --git a/src/lua/utils.c b/src/lua/utils.c
index df2c0d7bea6d64678b43d2d7da65cec2a2273cc7..441fec631dd411c1ba0e9559430ac8fe0acc607a 100644
--- a/src/lua/utils.c
+++ b/src/lua/utils.c
@@ -768,7 +768,7 @@ luaL_convertint64(lua_State *L, int idx, bool unsignd, int64_t *result)
 		*result = lua_tointeger(L, idx);
 		return 0;
 	case LUA_TCDATA:
-		cdata = luaL_checkcdata(L, 1, &ctypeid);
+		cdata = luaL_checkcdata(L, idx, &ctypeid);
 		switch (ctypeid) {
 		case CTID_CCHAR:
 		case CTID_INT8:
diff --git a/test/app-tap/module_api.c b/test/app-tap/module_api.c
index f0fae084122c79d285d69a584f7e8ed2c73e81f5..fbea07e4e25f1addf848a17d4bff1f888c0f856d 100644
--- a/test/app-tap/module_api.c
+++ b/test/app-tap/module_api.c
@@ -162,6 +162,12 @@ test_touint64(lua_State *L)
 		return 0;
 	lua_pop(L, 1);
 
+	lua_pushliteral(L, "not a cdata");
+	luaL_pushuint64(L, 18446744073709551615ULL);
+	if (luaL_touint64(L, -1) != 18446744073709551615ULL)
+		return 0;
+	lua_pop(L, 2);
+
 	lua_pushboolean(L, 1);
 	return 1;
 }
@@ -179,6 +185,12 @@ test_toint64(lua_State *L)
 		return 0;
 	lua_pop(L, 1);
 
+	lua_pushliteral(L, "not a cdata");
+	luaL_pushuint64(L, 18446744073709551615ULL);
+	if (luaL_touint64(L, -1) != 18446744073709551615ULL)
+		return 0;
+	lua_pop(L, 2);
+
 	lua_pushboolean(L, 1);
 	return 1;
 }