diff options
author | Philipp Janda <siffiejoe@gmx.net> | 2017-08-27 10:16:23 +0200 |
---|---|---|
committer | Philipp Janda <siffiejoe@gmx.net> | 2017-08-27 10:16:23 +0200 |
commit | 67aabb83a1eeea860b1a9a2104c90b80a523268a (patch) | |
tree | d11498b47e25ebf2b0c9ffddd5f7c25bedc097a1 | |
parent | 3931e7fc37c5c3cc30f8e35e5bdb06a59af1e884 (diff) | |
download | lua-compat-5.3-67aabb83a1eeea860b1a9a2104c90b80a523268a.tar.gz lua-compat-5.3-67aabb83a1eeea860b1a9a2104c90b80a523268a.tar.bz2 lua-compat-5.3-67aabb83a1eeea860b1a9a2104c90b80a523268a.zip |
Handle edge case for lua_pushlstring(). Add test.
-rw-r--r-- | c-api/compat-5.3.h | 2 | ||||
-rwxr-xr-x | tests/test.lua | 3 | ||||
-rw-r--r-- | tests/testmod.c | 10 |
3 files changed, 14 insertions, 1 deletions
diff --git a/c-api/compat-5.3.h b/c-api/compat-5.3.h index 5c3052b..7dd77c6 100644 --- a/c-api/compat-5.3.h +++ b/c-api/compat-5.3.h | |||
@@ -123,7 +123,7 @@ COMPAT53_API void lua_len (lua_State *L, int i); | |||
123 | (lua_pushstring(L, (s)), lua_tostring(L, -1)) | 123 | (lua_pushstring(L, (s)), lua_tostring(L, -1)) |
124 | 124 | ||
125 | #define lua_pushlstring(L, s, len) \ | 125 | #define lua_pushlstring(L, s, len) \ |
126 | (lua_pushlstring(L, (s), (len)), lua_tostring(L, -1)) | 126 | ((((len) == 0) ? lua_pushlstring(L, "", 0) : lua_pushlstring(L, (s), (len))), lua_tostring(L, -1)) |
127 | 127 | ||
128 | #ifndef luaL_newlibtable | 128 | #ifndef luaL_newlibtable |
129 | # define luaL_newlibtable(L, l) \ | 129 | # define luaL_newlibtable(L, l) \ |
diff --git a/tests/test.lua b/tests/test.lua index be16af9..582f55e 100755 --- a/tests/test.lua +++ b/tests/test.lua | |||
@@ -776,6 +776,9 @@ meta.__name = "XXX" | |||
776 | print(mod.tolstring(ud):gsub(":.*$", ": yyy")) | 776 | print(mod.tolstring(ud):gsub(":.*$", ": yyy")) |
777 | 777 | ||
778 | ___'' | 778 | ___'' |
779 | print(mod.pushstring()) | ||
780 | |||
781 | ___'' | ||
779 | print(mod.buffer()) | 782 | print(mod.buffer()) |
780 | 783 | ||
781 | ___'' | 784 | ___'' |
diff --git a/tests/testmod.c b/tests/testmod.c index 2293064..868136b 100644 --- a/tests/testmod.c +++ b/tests/testmod.c | |||
@@ -246,6 +246,15 @@ static int test_tolstring (lua_State *L) { | |||
246 | return 2; | 246 | return 2; |
247 | } | 247 | } |
248 | 248 | ||
249 | static int test_pushstring (lua_State *L) { | ||
250 | lua_pushstring(L, lua_pushliteral(L, "abc")); | ||
251 | lua_pushstring(L, lua_pushlstring(L, "abc", 2)); | ||
252 | lua_pushstring(L, lua_pushlstring(L, NULL, 0)); | ||
253 | lua_pushstring(L, lua_pushstring(L, "abc")); | ||
254 | lua_pushboolean(L, NULL == lua_pushstring(L, NULL)); | ||
255 | return 10; | ||
256 | } | ||
257 | |||
249 | static int test_buffer (lua_State *L) { | 258 | static int test_buffer (lua_State *L) { |
250 | luaL_Buffer b; | 259 | luaL_Buffer b; |
251 | char *p = luaL_buffinitsize(L, &b, LUAL_BUFFERSIZE+1); | 260 | char *p = luaL_buffinitsize(L, &b, LUAL_BUFFERSIZE+1); |
@@ -285,6 +294,7 @@ static const luaL_Reg funcs[] = { | |||
285 | { "uservalue", test_uservalue }, | 294 | { "uservalue", test_uservalue }, |
286 | { "globals", test_globals }, | 295 | { "globals", test_globals }, |
287 | { "tolstring", test_tolstring }, | 296 | { "tolstring", test_tolstring }, |
297 | { "pushstring", test_pushstring }, | ||
288 | { "buffer", test_buffer }, | 298 | { "buffer", test_buffer }, |
289 | { "exec", test_exec }, | 299 | { "exec", test_exec }, |
290 | { NULL, NULL } | 300 | { NULL, NULL } |