aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Janda <siffiejoe@gmx.net>2017-08-27 10:16:23 +0200
committerPhilipp Janda <siffiejoe@gmx.net>2017-08-27 10:16:23 +0200
commit67aabb83a1eeea860b1a9a2104c90b80a523268a (patch)
treed11498b47e25ebf2b0c9ffddd5f7c25bedc097a1
parent3931e7fc37c5c3cc30f8e35e5bdb06a59af1e884 (diff)
downloadlua-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.h2
-rwxr-xr-xtests/test.lua3
-rw-r--r--tests/testmod.c10
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"
776print(mod.tolstring(ud):gsub(":.*$", ": yyy")) 776print(mod.tolstring(ud):gsub(":.*$", ": yyy"))
777 777
778___'' 778___''
779print(mod.pushstring())
780
781___''
779print(mod.buffer()) 782print(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
249static 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
249static int test_buffer (lua_State *L) { 258static 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 }