BUG/MINOR: hlua: Don't strip last non-LWS char in hlua_pushstrippedstring()
hlua_pushstrippedstring() function strips leading and trailing LWS
characters. But the result length it too short by 1 byte. Thus the last
non-LWS character is stripped. Note that a string containing only LWS
characters resulting to a stipped string with an invalid length (-1). This
leads to a lua runtime error.
This bug was reported in the issue #1155. It must be backported as far as
1.7.
diff --git a/src/hlua_fcn.c b/src/hlua_fcn.c
index c2d2681..46a807e 100644
--- a/src/hlua_fcn.c
+++ b/src/hlua_fcn.c
@@ -172,12 +172,13 @@
const char *hlua_pushstrippedstring(lua_State *L, const char *str)
{
const char *p;
- const char *e;
+ int l;
for (p = str; HTTP_IS_LWS(*p); p++);
- for (e = p + strlen(p) - 1; e > p && HTTP_IS_LWS(*e); e--);
+
+ for (l = strlen(p); l && HTTP_IS_LWS(p[l-1]); l--);
- return lua_pushlstring(L, p, e - p);
+ return lua_pushlstring(L, p, l);
}
/* The three following functions are useful for adding entries