diff --git a/core/tarantool_lua.m b/core/tarantool_lua.m
index 32790e1001adf2500cc3e87e4326c929e8e8572f..951baf5d8b67b625b34bd53d1deb8a86d694bbfd 100644
--- a/core/tarantool_lua.m
+++ b/core/tarantool_lua.m
@@ -38,6 +38,7 @@
 #include "lj_ctype.h"
 #include "lj_cdata.h"
 #include "lj_cconv.h"
+#include "lj_state.h"
 
 #include "pickle.h"
 #include "fiber.h"
@@ -252,10 +253,10 @@ luaL_pushcdata(struct lua_State *L, CTypeID id, int bits)
 	CTSize sz;
 	lj_ctype_info(cts, id, &sz);
 	GCcdata *cd = lj_cdata_new(cts, id, bits);
-	TValue *o = L->base + 1;
-	setcdataV(L, o - 1, cd);
+	TValue *o = L->top;
+	setcdataV(L, o, cd);
 	lj_cconv_ct_init(cts, ct, sz, cdataptr(cd), o, 0);
-	L->top = o;
+	incr_top(L);
 	return cd;
 }
 
diff --git a/test/box_big/lua.result b/test/box_big/lua.result
index 9b60d8228a1bc77d5bfeeea6eec79c9487253c8f..7824c223facbbab8a642fb92e964a64334222bac 100644
--- a/test/box_big/lua.result
+++ b/test/box_big/lua.result
@@ -95,3 +95,18 @@ lua num == tonumber64('18446744073709551615')
 ---
  - true
 ...
+lua num,num1,num2 = box.unpack('lll', tu[0], tu[0], tu[0])
+---
+...
+lua num == tonumber64('18446744073709551615')
+---
+ - true
+...
+lua num1 == tonumber64('18446744073709551615')
+---
+ - true
+...
+lua num2 == tonumber64('18446744073709551615')
+---
+ - true
+...
diff --git a/test/box_big/lua.test b/test/box_big/lua.test
index 0c43ab7c6b1cf0d1c50d80587cc1fa8c8102f16c..557f85498b9b7acc86008536441694908eeed1fb 100644
--- a/test/box_big/lua.test
+++ b/test/box_big/lua.test
@@ -47,3 +47,7 @@ exec admin "lua num = box.unpack('l', tu[0])"
 exec admin "lua print(num)"
 exec admin "lua type(num) == 'cdata'"
 exec admin "lua num == tonumber64('18446744073709551615')"
+exec admin "lua num,num1,num2 = box.unpack('lll', tu[0], tu[0], tu[0])"
+exec admin "lua num == tonumber64('18446744073709551615')"
+exec admin "lua num1 == tonumber64('18446744073709551615')"
+exec admin "lua num2 == tonumber64('18446744073709551615')"