From: Vsevolod Stakhov Date: Wed, 7 Oct 2015 12:25:49 +0000 (+0100) Subject: Fix lua_http. X-Git-Tag: 1.0.5~66^2~14 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=ee9def66ca6120fdaa9acc623b8c8e49b1b2ea93;p=rspamd.git Fix lua_http. --- diff --git a/src/libutil/map.c b/src/libutil/map.c index cba82ba41..28faf13c4 100644 --- a/src/libutil/map.c +++ b/src/libutil/map.c @@ -111,7 +111,7 @@ write_http_request (struct http_callback_data *cbd) msg = rspamd_http_new_message (HTTP_REQUEST); - msg->url = g_string_new (cbd->data->path); + msg->url = rspamd_fstring_new_init (cbd->data->path, strlen (cbd->data->path)); if (cbd->data->last_checked != 0) { tm = gmtime (&cbd->data->last_checked); strftime (datebuf, sizeof (datebuf), "%a, %d %b %Y %H:%M:%S %Z", tm); diff --git a/src/lua/lua_http.c b/src/lua/lua_http.c index e87da02b1..bbea1ebce 100644 --- a/src/lua/lua_http.c +++ b/src/lua/lua_http.c @@ -168,7 +168,9 @@ lua_http_finish_handler (struct rspamd_http_connection *conn, /* Headers */ lua_newtable (cbd->L); LL_FOREACH (msg->headers, h) { - rspamd_lua_table_set (cbd->L, h->name->str, h->value->str); + lua_pushlstring (cbd->L, h->name->begin, h->name->len); + lua_pushlstring (cbd->L, h->value->begin, h->value->len); + lua_settable (cbd->L, -3); } if (lua_pcall (cbd->L, 4, 0, 0) != 0) { msg_info ("callback call failed: %s", lua_tostring (cbd->L, -1)); @@ -269,8 +271,9 @@ lua_http_push_headers (lua_State *L, struct rspamd_http_message *msg) static gint lua_http_request (lua_State *L) { - const gchar *url; + const gchar *url, *lua_body; gint cbref; + gsize bodylen; struct event_base *ev_base; struct rspamd_http_message *msg; struct lua_http_cbdata *cbd; @@ -403,17 +406,14 @@ lua_http_request (lua_State *L) lua_pushstring (L, "body"); lua_gettable (L, -2); if (lua_type (L, -1) == LUA_TSTRING) { - msg->body = g_string_new (lua_tostring (L, -1)); + lua_body = lua_tolstring (L, -1, &bodylen); + msg->body = rspamd_fstring_new_init (lua_body, bodylen); } else if (lua_type (L, -1) == LUA_TUSERDATA) { t = lua_check_text (L, -1); + /* TODO: think about zero-copy possibilities */ if (t) { - /* XXX: is it safe ? */ - msg->body = g_string_new (NULL); - msg->body->str = (gchar *)t->start; - msg->body->len = t->len; - /* It is not safe unless we set len to avoid body_buf to be freed */ - msg->body_buf.len = t->len; + msg->body = rspamd_fstring_new_init (t->start, t->len); } }