Bläddra i källkod

[Minor] Avoid unnecessary dynamic allocation

tags/1.7.0
Vsevolod Stakhov 6 år sedan
förälder
incheckning
8568f4e445
4 ändrade filer med 52 tillägg och 65 borttagningar
  1. 2
    2
      src/libserver/protocol.c
  2. 45
    58
      src/libutil/http.c
  3. 2
    2
      src/libutil/http_private.h
  4. 3
    3
      src/lua/lua_http.c

+ 2
- 2
src/libserver/protocol.c Visa fil

@@ -220,8 +220,8 @@ rspamd_protocol_handle_headers (struct rspamd_task *task,

HASH_ITER (hh, msg->headers, header, htmp) {
DL_FOREACH (header, h) {
hn = rspamd_fstring_new_init (h->name->begin, h->name->len);
hv = rspamd_fstring_new_init (h->value->begin, h->value->len);
hn = rspamd_fstring_new_init (h->name.begin, h->name.len);
hv = rspamd_fstring_new_init (h->value.begin, h->value.len);
hn_tok = rspamd_ftok_map (hn);
hv_tok = rspamd_ftok_map (hv);


+ 45
- 58
src/libutil/http.c Visa fil

@@ -471,17 +471,17 @@ static inline void
rspamd_http_check_special_header (struct rspamd_http_connection *conn,
struct rspamd_http_connection_private *priv)
{
if (rspamd_ftok_casecmp (priv->header->name, &date_header) == 0) {
priv->msg->date = rspamd_http_parse_date (priv->header->value->begin,
priv->header->value->len);
if (rspamd_ftok_casecmp (&priv->header->name, &date_header) == 0) {
priv->msg->date = rspamd_http_parse_date (priv->header->value.begin,
priv->header->value.len);
}
else if (rspamd_ftok_casecmp (priv->header->name, &key_header) == 0) {
rspamd_http_parse_key (priv->header->value, conn, priv);
else if (rspamd_ftok_casecmp (&priv->header->name, &key_header) == 0) {
rspamd_http_parse_key (&priv->header->value, conn, priv);
}
else if (rspamd_ftok_casecmp (priv->header->name, &last_modified_header) == 0) {
else if (rspamd_ftok_casecmp (&priv->header->name, &last_modified_header) == 0) {
priv->msg->last_modified = rspamd_http_parse_date (
priv->header->value->begin,
priv->header->value->len);
priv->header->value.begin,
priv->header->value.len);
}
}

@@ -527,18 +527,18 @@ rspamd_http_finish_header (struct rspamd_http_connection *conn,

priv->header->combined = rspamd_fstring_append (priv->header->combined,
"\r\n", 2);
priv->header->value->len = priv->header->combined->len -
priv->header->name->len - 4;
priv->header->value->begin = priv->header->combined->str +
priv->header->name->len + 2;
priv->header->name->begin = priv->header->combined->str;
priv->header->value.len = priv->header->combined->len -
priv->header->name.len - 4;
priv->header->value.begin = priv->header->combined->str +
priv->header->name.len + 2;
priv->header->name.begin = priv->header->combined->str;

HASH_FIND (hh, priv->msg->headers, priv->header->name->begin,
priv->header->name->len, hdr);
HASH_FIND (hh, priv->msg->headers, priv->header->name.begin,
priv->header->name.len, hdr);

if (hdr == NULL) {
HASH_ADD_KEYPTR (hh, priv->msg->headers, priv->header->name->begin,
priv->header->name->len, priv->header);
HASH_ADD_KEYPTR (hh, priv->msg->headers, priv->header->name.begin,
priv->header->name.len, priv->header);
}

DL_APPEND (hdr, priv->header);
@@ -550,8 +550,6 @@ static void
rspamd_http_init_header (struct rspamd_http_connection_private *priv)
{
priv->header = g_slice_alloc0 (sizeof (struct rspamd_http_header));
priv->header->name = g_slice_alloc0 (sizeof (*priv->header->name));
priv->header->value = g_slice_alloc0 (sizeof (*priv->header->value));
priv->header->combined = rspamd_fstring_new ();
}

@@ -601,7 +599,7 @@ rspamd_http_on_header_value (http_parser * parser,
priv->flags |= RSPAMD_HTTP_CONN_FLAG_NEW_HEADER;
priv->header->combined = rspamd_fstring_append (priv->header->combined,
": ", 2);
priv->header->name->len = priv->header->combined->len - 2;
priv->header->name.len = priv->header->combined->len - 2;
}

priv->header->combined = rspamd_fstring_append (priv->header->combined,
@@ -862,8 +860,6 @@ rspamd_http_decrypt_message (struct rspamd_http_connection *conn,

DL_FOREACH_SAFE (hdr, hcur, hcurtmp) {
rspamd_fstring_free (hcur->combined);
g_slice_free1 (sizeof (*hcur->name), hcur->name);
g_slice_free1 (sizeof (*hcur->value), hcur->value);
g_slice_free1 (sizeof (struct rspamd_http_header), hcur);
}
}
@@ -1490,21 +1486,20 @@ rspamd_http_connection_copy_msg (struct rspamd_http_message *msg)

DL_FOREACH (hdr, hcur) {
nhdr = g_slice_alloc (sizeof (struct rspamd_http_header));
nhdr->name = g_slice_alloc (sizeof (*hcur->name));
nhdr->value = g_slice_alloc (sizeof (*hcur->value));

nhdr->combined = rspamd_fstring_new_init (hcur->combined->str,
hcur->combined->len);
nhdr->name->begin = nhdr->combined->str +
(hcur->name->begin - hcur->combined->str);
nhdr->name->len = hcur->name->len;
nhdr->value->begin = nhdr->combined->str +
(hcur->value->begin - hcur->combined->str);
nhdr->value->len = hcur->value->len;
nhdr->name.begin = nhdr->combined->str +
(hcur->name.begin - hcur->combined->str);
nhdr->name.len = hcur->name.len;
nhdr->value.begin = nhdr->combined->str +
(hcur->value.begin - hcur->combined->str);
nhdr->value.len = hcur->value.len;
DL_APPEND (nhdrs, nhdr);
}

HASH_ADD_KEYPTR (hh, new_msg->headers, nhdrs->name->begin,
nhdrs->name->len, nhdrs);
HASH_ADD_KEYPTR (hh, new_msg->headers, nhdrs->name.begin,
nhdrs->name.len, nhdrs);
}

return new_msg;
@@ -2808,8 +2803,6 @@ rspamd_http_message_free (struct rspamd_http_message *msg)

DL_FOREACH_SAFE (hdr, hcur, hcurtmp) {
rspamd_fstring_free (hcur->combined);
g_slice_free1 (sizeof (*hcur->name), hcur->name);
g_slice_free1 (sizeof (*hcur->value), hcur->value);
g_slice_free1 (sizeof (struct rspamd_http_header), hcur);
}
}
@@ -2865,19 +2858,17 @@ rspamd_http_message_add_header_len (struct rspamd_http_message *msg,
hdr->combined = rspamd_fstring_sized_new (nlen + vlen + 4);
rspamd_printf_fstring (&hdr->combined, "%s: %*s\r\n", name, (gint)vlen,
value);
hdr->value = g_slice_alloc (sizeof (*hdr->value));
hdr->name = g_slice_alloc (sizeof (*hdr->name));
hdr->name->begin = hdr->combined->str;
hdr->name->len = nlen;
hdr->value->begin = hdr->combined->str + nlen + 2;
hdr->value->len = vlen;
hdr->name.begin = hdr->combined->str;
hdr->name.len = nlen;
hdr->value.begin = hdr->combined->str + nlen + 2;
hdr->value.len = vlen;

HASH_FIND (hh, msg->headers, hdr->name->begin,
hdr->name->len, found);
HASH_FIND (hh, msg->headers, hdr->name.begin,
hdr->name.len, found);

if (found == NULL) {
HASH_ADD_KEYPTR (hh, msg->headers, hdr->name->begin,
hdr->name->len, hdr);
HASH_ADD_KEYPTR (hh, msg->headers, hdr->name.begin,
hdr->name.len, hdr);
}

DL_APPEND (found, hdr);
@@ -2908,19 +2899,17 @@ rspamd_http_message_add_header_fstr (struct rspamd_http_message *msg,
vlen = value->len;
hdr->combined = rspamd_fstring_sized_new (nlen + vlen + 4);
rspamd_printf_fstring (&hdr->combined, "%s: %V\r\n", name, value);
hdr->value = g_slice_alloc (sizeof (*hdr->value));
hdr->name = g_slice_alloc (sizeof (*hdr->name));
hdr->name->begin = hdr->combined->str;
hdr->name->len = nlen;
hdr->value->begin = hdr->combined->str + nlen + 2;
hdr->value->len = vlen;
hdr->name.begin = hdr->combined->str;
hdr->name.len = nlen;
hdr->value.begin = hdr->combined->str + nlen + 2;
hdr->value.len = vlen;

HASH_FIND (hh, msg->headers, hdr->name->begin,
hdr->name->len, found);
HASH_FIND (hh, msg->headers, hdr->name.begin,
hdr->name.len, found);

if (found == NULL) {
HASH_ADD_KEYPTR (hh, msg->headers, hdr->name->begin,
hdr->name->len, hdr);
HASH_ADD_KEYPTR (hh, msg->headers, hdr->name.begin,
hdr->name.len, hdr);
}

DL_APPEND (found, hdr);
@@ -2939,7 +2928,7 @@ rspamd_http_message_find_header (struct rspamd_http_message *msg,
HASH_FIND (hh, msg->headers, name, slen, hdr);

if (hdr) {
res = hdr->value;
res = &hdr->value;
}
}

@@ -2963,7 +2952,7 @@ rspamd_http_message_find_header_multiple (
res = g_ptr_array_sized_new (4);

LL_FOREACH (hdr, cur) {
g_ptr_array_add (res, cur->value);
g_ptr_array_add (res, &cur->value);
}
}
}
@@ -2990,8 +2979,6 @@ rspamd_http_message_remove_header (struct rspamd_http_message *msg,

DL_FOREACH_SAFE (hdr, hcur, hcurtmp) {
rspamd_fstring_free (hcur->combined);
g_slice_free1 (sizeof (*hcur->value), hcur->value);
g_slice_free1 (sizeof (*hcur->name), hcur->name);
g_slice_free1 (sizeof (*hcur), hcur);
}
}

+ 2
- 2
src/libutil/http_private.h Visa fil

@@ -26,9 +26,9 @@
* HTTP header structure
*/
struct rspamd_http_header {
rspamd_ftok_t *name;
rspamd_ftok_t *value;
rspamd_fstring_t *combined;
rspamd_ftok_t name;
rspamd_ftok_t value;
UT_hash_handle hh;
struct rspamd_http_header *prev, *next;
};

+ 3
- 3
src/lua/lua_http.c Visa fil

@@ -208,9 +208,9 @@ lua_http_finish_handler (struct rspamd_http_connection *conn,
/*
* Lowercase header name, as Lua cannot search in caseless matter
*/
rspamd_str_lc (h->combined->str, h->name->len);
lua_pushlstring (cbd->L, h->name->begin, h->name->len);
lua_pushlstring (cbd->L, h->value->begin, h->value->len);
rspamd_str_lc (h->combined->str, h->name.len);
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);
}


Laddar…
Avbryt
Spara