]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
lua: use LuaPushStringBuffer in more places
authorVictor Julien <victor@inliniac.net>
Fri, 1 Aug 2014 13:34:37 +0000 (15:34 +0200)
committerVictor Julien <victor@inliniac.net>
Fri, 15 Aug 2014 11:58:27 +0000 (13:58 +0200)
Replace existing workarounds with LuaPushStringBuffer

src/detect-luajit-extensions.c
src/detect-luajit.c

index 0b9894f5976a0403af91c1673c404195b0d55ca6..ece55ac6e5297ce42a109f5d8582cf81e7e25808 100644 (file)
@@ -126,26 +126,12 @@ static int LuajitGetFlowvar(lua_State *luastate)
         return 2;
     }
 
-    //SCLogInfo("returning:");
-    //PrintRawDataFp(stdout,fv->data.fv_str.value,fv->data.fv_str.value_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 reallen = fv->data.fv_str.value_len;
-    size_t buflen = fv->data.fv_str.value_len + 1 + ((fv->data.fv_str.value_len + 1) % 4);
-    uint8_t buf[buflen];
-    memset(buf, 0x00, buflen);
-    memcpy(buf, fv->data.fv_str.value, fv->data.fv_str.value_len);
-    buf[fv->data.fv_str.value_len] = '\0';
+    LuaPushStringBuffer(luastate, (const uint8_t *)fv->data.fv_str.value,
+            (size_t)fv->data.fv_str.value_len);
 
     if (flow_lock == LUA_FLOW_NOT_LOCKED_BY_PARENT)
         FLOWLOCK_UNLOCK(f);
 
-    /* return value through luastate, as a luastring */
-    lua_pushlstring(luastate, (char *)buf, reallen);
-
     return 1;
 
 }
index c634a86b19424760bb86f07e43ab3cf02df8e95f..16647067a6ba0c8260aa61aecc2a5ae23089c01e 100644 (file)
@@ -299,16 +299,7 @@ int DetectLuajitMatchBuffer(DetectEngineThreadCtx *det_ctx, Signature *s, SigMat
     lua_settable(tluajit->luastate, -3);
 
     lua_pushstring (tluajit->luastate, luajit->buffername); /* stack at -2 */
-    if (buffer_len % 4) {
-        size_t tmpbuflen = buffer_len + (buffer_len % 4);
-        uint8_t tmpbuf[tmpbuflen];
-        memset(tmpbuf, 0x00, tmpbuflen);
-        memcpy(tmpbuf, buffer, buffer_len);
-        tmpbuf[buffer_len] = '\0';
-        lua_pushlstring (tluajit->luastate, (const char *)tmpbuf, (size_t)buffer_len);
-    } else {
-        lua_pushlstring (tluajit->luastate, (const char *)buffer, (size_t)buffer_len);
-    }
+    LuaPushStringBuffer(tluajit->luastate, (const uint8_t *)buffer, (size_t)buffer_len);
     lua_settable(tluajit->luastate, -3);
 
     int retval = lua_pcall(tluajit->luastate, 1, 1, 0);
@@ -421,12 +412,12 @@ static int DetectLuajitMatch (ThreadVars *tv, DetectEngineThreadCtx *det_ctx,
 
     if ((tluajit->flags & DATATYPE_PAYLOAD) && p->payload_len) {
         lua_pushliteral(tluajit->luastate, "payload"); /* stack at -2 */
-        lua_pushlstring (tluajit->luastate, (const char *)p->payload, (size_t)p->payload_len); /* stack at -3 */
+        LuaPushStringBuffer (tluajit->luastate, (const uint8_t *)p->payload, (size_t)p->payload_len); /* stack at -3 */
         lua_settable(tluajit->luastate, -3);
     }
     if ((tluajit->flags & DATATYPE_PACKET) && GET_PKT_LEN(p)) {
         lua_pushliteral(tluajit->luastate, "packet"); /* stack at -2 */
-        lua_pushlstring (tluajit->luastate, (const char *)GET_PKT_DATA(p), (size_t)GET_PKT_LEN(p)); /* stack at -3 */
+        LuaPushStringBuffer (tluajit->luastate, (const uint8_t *)GET_PKT_DATA(p), (size_t)GET_PKT_LEN(p)); /* stack at -3 */
         lua_settable(tluajit->luastate, -3);
     }
     if (tluajit->alproto == ALPROTO_HTTP) {
@@ -445,8 +436,8 @@ static int DetectLuajitMatch (ThreadVars *tv, DetectEngineThreadCtx *det_ctx,
                 if ((tluajit->flags & DATATYPE_HTTP_REQUEST_LINE) && tx->request_line != NULL &&
                     bstr_len(tx->request_line) > 0) {
                     lua_pushliteral(tluajit->luastate, "http.request_line"); /* stack at -2 */
-                    lua_pushlstring (tluajit->luastate,
-                                     (const char *)bstr_ptr(tx->request_line),
+                    LuaPushStringBuffer(tluajit->luastate,
+                                     (const uint8_t *)bstr_ptr(tx->request_line),
                                      bstr_len(tx->request_line));
                     lua_settable(tluajit->luastate, -3);
                 }