From: Victor Julien Date: Fri, 1 Aug 2014 10:41:17 +0000 (+0200) Subject: lua: LuaPushStringBuffer optimization X-Git-Tag: suricata-2.1beta2~123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=66019ba3251b86a79bf529b3633ccc16f27ea4ef;p=thirdparty%2Fsuricata.git lua: LuaPushStringBuffer optimization Only use a temp buffer when really necessary, which is when the buffer size is not a multiple of 4. --- diff --git a/src/util-lua.c b/src/util-lua.c index b091445ab4..a93dcb5d80 100644 --- a/src/util-lua.c +++ b/src/util-lua.c @@ -236,18 +236,22 @@ void LuaPrintStack(lua_State *state) { int LuaPushStringBuffer(lua_State *luastate, const uint8_t *input, size_t input_len) { - /* we're using a buffer sized at a multiple of 4 as lua_pushlstring generates - * invalid read errors in valgrind otherwise. Adding in a nul to be sure. - * - * Buffer size = len + 1 (for nul) + whatever makes it a multiple of 4 */ - size_t buflen = input_len + 1 + ((input_len + 1) % 4); - uint8_t buf[buflen]; - memset(buf, 0x00, buflen); - memcpy(buf, input, input_len); - buf[input_len] = '\0'; - - /* return value through luastate, as a luastring */ - lua_pushlstring(luastate, (char *)buf, input_len); + if (input_len % 4 != 0) { + /* we're using a buffer sized at a multiple of 4 as lua_pushlstring generates + * invalid read errors in valgrind otherwise. Adding in a nul to be sure. + * + * Buffer size = len + 1 (for nul) + whatever makes it a multiple of 4 */ + size_t buflen = input_len + 1 + ((input_len + 1) % 4); + uint8_t buf[buflen]; + memset(buf, 0x00, buflen); + memcpy(buf, input, input_len); + buf[input_len] = '\0'; + + /* return value through luastate, as a luastring */ + lua_pushlstring(luastate, (char *)buf, input_len); + } else { + lua_pushlstring(luastate, (char *)input, input_len); + } return 1; }