From: Christopher Faulet Date: Wed, 3 Mar 2021 18:36:51 +0000 (+0100) Subject: BUG/MINOR: hlua: Don't strip last non-LWS char in hlua_pushstrippedstring() X-Git-Tag: v2.4-dev11~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ec4e3c1acf95bcdc56028bbefe1a355c457b978;p=thirdparty%2Fhaproxy.git 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 c2d26817ac..46a807e58f 100644 --- a/src/hlua_fcn.c +++ b/src/hlua_fcn.c @@ -172,12 +172,13 @@ int hlua_fcn_pushfield(lua_State *L, struct field *field) 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--); - return lua_pushlstring(L, p, e - p); + for (l = strlen(p); l && HTTP_IS_LWS(p[l-1]); l--); + + return lua_pushlstring(L, p, l); } /* The three following functions are useful for adding entries