aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2021-05-21 16:28:55 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2021-05-21 16:28:55 +0100
commit1852e17ee77f41ef102f67bd97019788241fdf5a (patch)
treeece78b0ab8b56c5ea0141341d6f184d8b4ab0aa8 /src
parentadeb3780e89cc42dd452280428bf46b1a0efc63b (diff)
downloadrspamd-1852e17ee77f41ef102f67bd97019788241fdf5a.tar.gz
rspamd-1852e17ee77f41ef102f67bd97019788241fdf5a.zip
[Rework] Allow C code to be compiled with C++ compiler
Diffstat (limited to 'src')
-rw-r--r--src/libserver/html/html.cxx312
-rw-r--r--src/libserver/html/html_colors.h738
-rw-r--r--src/libserver/html/html_tag_defs.hxx6
3 files changed, 157 insertions, 899 deletions
diff --git a/src/libserver/html/html.cxx b/src/libserver/html/html.cxx
index d1f2da438..fcb6ba8f7 100644
--- a/src/libserver/html/html.cxx
+++ b/src/libserver/html/html.cxx
@@ -19,7 +19,7 @@
#include "message.h"
#include "html.h"
#include "html_tags.h"
-#include "html_colors.h"
+#include "libserver/css/css_value.hxx"
#include "url.h"
#include "contrib/libucl/khash.h"
@@ -42,6 +42,11 @@ namespace rspamd::html {
static const guint max_tags = 8192; /* Ignore tags if this maximum is reached */
+static const html_tags_storage html_tags_defs;
+
+
+}
+
#define msg_debug_html(...) rspamd_conditional_debug_fast (NULL, NULL, \
rspamd_html_log_id, "html", pool->tag.uid, \
G_STRFUNC, \
@@ -49,24 +54,24 @@ static const guint max_tags = 8192; /* Ignore tags if this maximum is reached */
INIT_LOG_MODULE(html)
-
-[[maybe_unused]] static const html_tags_storage html_tags_defs;
+/* Unconverted C part */
static struct rspamd_url *rspamd_html_process_url(rspamd_mempool_t *pool,
const gchar *start, guint len,
struct html_tag_component *comp);
+
static gboolean
rspamd_html_check_balance(GNode *node, GNode **cur_level)
{
- struct html_tag *arg = node->data, *tmp;
+ struct html_tag *arg = (struct html_tag *)node->data, *tmp;
GNode *cur;
if (arg->flags & FL_CLOSING) {
/* First of all check whether this tag is closing tag for parent node */
cur = node->parent;
while (cur && cur->data) {
- tmp = cur->data;
+ tmp = (struct html_tag *)cur->data;
if (tmp->id == arg->id &&
(tmp->flags & FL_CLOSED) == 0) {
tmp->flags |= FL_CLOSED;
@@ -86,56 +91,9 @@ rspamd_html_check_balance(GNode *node, GNode **cur_level)
return FALSE;
}
-gint
-rspamd_html_tag_by_name(const gchar *name) {
- khiter_t k;
-
- k = kh_get (tag_by_name, html_tag_by_name, name);
-
- if (k != kh_end (html_tag_by_name)) {
- return kh_val (html_tag_by_name, k).id;
- }
-
- return -1;
-}
-
-gboolean
-rspamd_html_tag_seen(struct html_content *hc, const gchar *tagname) {
- gint id;
-
- g_assert (hc != NULL);
- g_assert (hc->tags_seen != NULL);
-
- id = rspamd_html_tag_by_name(tagname);
-
- if (id != -1) {
- return isset (hc->tags_seen, id);
- }
-
- return FALSE;
-}
-
-const gchar *
-rspamd_html_tag_by_id(gint id) {
- khiter_t k;
-
- k = kh_get (tag_by_id, html_tag_by_id, id);
-
- if (k != kh_end (html_tag_by_id)) {
- return kh_val (html_tag_by_id, k).name;
- }
-
- return NULL;
-}
-
-/* Decode HTML entitles in text */
-guint
-rspamd_html_decode_entitles_inplace(gchar *s, gsize len) {
-
-}
-
static gboolean
-rspamd_url_is_subdomain(rspamd_ftok_t *t1, rspamd_ftok_t *t2) {
+rspamd_url_is_subdomain(rspamd_ftok_t *t1, rspamd_ftok_t *t2)
+{
const gchar *p1, *p2;
p1 = t1->begin + t1->len - 1;
@@ -188,7 +146,8 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
const guchar *url_text,
gsize len,
gboolean *url_found,
- struct rspamd_url **ptext_url) {
+ struct rspamd_url **ptext_url)
+{
struct rspamd_url *text_url;
rspamd_ftok_t disp_tok, href_tok;
gint rc;
@@ -217,10 +176,10 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
}
if (end > url_text + 4 &&
- rspamd_url_find(pool, url_text, end - url_text, &url_str,
+ rspamd_url_find(pool, (const gchar *)url_text, (gsize)(end - url_text), &url_str,
RSPAMD_URL_FIND_ALL,
&url_pos, NULL) &&
- url_str != NULL) {
+ url_str != NULL) {
if (url_pos > 0) {
/*
* We have some url at some offset, so we need to check what is
@@ -238,7 +197,7 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
}
}
- text_url = rspamd_mempool_alloc0 (pool, sizeof(struct rspamd_url));
+ text_url = rspamd_mempool_alloc0_type (pool, struct rspamd_url);
rc = rspamd_url_parse(text_url, url_str, strlen(url_str), pool,
RSPAMD_URL_PARSE_TEXT);
@@ -248,7 +207,7 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
#if U_ICU_VERSION_MAJOR_NUM >= 46
if (rspamd_substring_search_caseless(rspamd_url_host_unsafe (text_url),
text_url->hostlen, "xn--", 4) != -1) {
- idn_hbuf = rspamd_mempool_alloc (pool, text_url->hostlen * 2 + 1);
+ idn_hbuf = (char *)rspamd_mempool_alloc (pool, text_url->hostlen * 2 + 1);
/* We need to convert it to the normal value first */
disp_tok.len = uidna_nameToUnicodeUTF8(udn,
rspamd_url_host_unsafe (text_url), text_url->hostlen,
@@ -269,7 +228,7 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
#if U_ICU_VERSION_MAJOR_NUM >= 46
if (rspamd_substring_search_caseless(rspamd_url_host_unsafe (href_url),
href_url->hostlen, "xn--", 4) != -1) {
- idn_hbuf = rspamd_mempool_alloc (pool, href_url->hostlen * 2 + 1);
+ idn_hbuf = (char *)rspamd_mempool_alloc (pool, href_url->hostlen * 2 + 1);
/* We need to convert it to the normal value first */
href_tok.len = uidna_nameToUnicodeUTF8(udn,
rspamd_url_host_unsafe (href_url), href_url->hostlen,
@@ -294,7 +253,7 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
#if U_ICU_VERSION_MAJOR_NUM >= 46
if (rspamd_substring_search_caseless(rspamd_url_tld_unsafe (text_url),
text_url->tldlen, "xn--", 4) != -1) {
- idn_hbuf = rspamd_mempool_alloc (pool, text_url->tldlen * 2 + 1);
+ idn_hbuf = (char *)rspamd_mempool_alloc (pool, text_url->tldlen * 2 + 1);
/* We need to convert it to the normal value first */
disp_tok.len = uidna_nameToUnicodeUTF8(udn,
rspamd_url_tld_unsafe (text_url), text_url->tldlen,
@@ -315,7 +274,7 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
#if U_ICU_VERSION_MAJOR_NUM >= 46
if (rspamd_substring_search_caseless(rspamd_url_tld_unsafe (href_url),
href_url->tldlen, "xn--", 4) != -1) {
- idn_hbuf = rspamd_mempool_alloc (pool, href_url->tldlen * 2 + 1);
+ idn_hbuf = (char*)rspamd_mempool_alloc (pool, href_url->tldlen * 2 + 1);
/* We need to convert it to the normal value first */
href_tok.len = uidna_nameToUnicodeUTF8(udn,
rspamd_url_tld_unsafe (href_url), href_url->tldlen,
@@ -354,8 +313,8 @@ rspamd_html_url_is_phished(rspamd_mempool_t *pool,
*/
gboolean obfuscation_found = FALSE;
- if (len > 4 && g_ascii_strncasecmp(url_text, "http", 4) == 0 &&
- rspamd_substring_search(url_text, len, "://", 3) != -1) {
+ if (len > 4 && g_ascii_strncasecmp((char *)url_text, "http", 4) == 0 &&
+ rspamd_substring_search((char *)url_text, len, "://", 3) != -1) {
/* Clearly an obfuscation attempt */
obfuscation_found = TRUE;
}
@@ -388,7 +347,7 @@ rspamd_html_process_tag(rspamd_mempool_t *pool, struct html_content *hc,
nnode);
}
- if (hc->total_tags > max_tags) {
+ if (hc->total_tags > rspamd::html::max_tags) {
hc->flags |= RSPAMD_HTML_FLAG_TOO_MANY_TAGS;
}
@@ -408,7 +367,7 @@ rspamd_html_process_tag(rspamd_mempool_t *pool, struct html_content *hc,
return FALSE;
}
- if (hc->total_tags < max_tags) {
+ if (hc->total_tags < rspamd::html::max_tags) {
nnode = g_node_new(tag);
g_node_append (*cur_level, nnode);
@@ -426,7 +385,7 @@ rspamd_html_process_tag(rspamd_mempool_t *pool, struct html_content *hc,
}
}
else {
- parent = (*cur_level)->data;
+ parent = (struct html_tag *)(*cur_level)->data;
if (parent) {
if ((parent->flags & FL_IGNORE)) {
@@ -442,7 +401,7 @@ rspamd_html_process_tag(rspamd_mempool_t *pool, struct html_content *hc,
*balanced = FALSE;
tag->parent = parent->parent;
- if (hc->total_tags < max_tags) {
+ if (hc->total_tags < rspamd::html::max_tags) {
nnode = g_node_new(tag);
g_node_append (parent->parent, nnode);
*cur_level = nnode;
@@ -454,7 +413,7 @@ rspamd_html_process_tag(rspamd_mempool_t *pool, struct html_content *hc,
}
}
- if (hc->total_tags < max_tags) {
+ if (hc->total_tags < rspamd::html::max_tags) {
nnode = g_node_new(tag);
g_node_append (*cur_level, nnode);
@@ -475,10 +434,10 @@ rspamd_html_process_tag(rspamd_mempool_t *pool, struct html_content *hc,
}
else {
/* Inline tag */
- parent = (*cur_level)->data;
+ parent = (struct html_tag *)(*cur_level)->data;
if (parent) {
- if (hc->total_tags < max_tags) {
+ if (hc->total_tags < rspamd::html::max_tags) {
nnode = g_node_new(tag);
g_node_append (*cur_level, nnode);
@@ -496,7 +455,7 @@ rspamd_html_process_tag(rspamd_mempool_t *pool, struct html_content *hc,
}
#define NEW_COMPONENT(comp_type) do { \
- comp = rspamd_mempool_alloc (pool, sizeof (*comp)); \
+ comp = (decltype(comp))rspamd_mempool_alloc (pool, sizeof (*comp)); \
comp->type = (comp_type); \
comp->start = NULL; \
comp->len = 0; \
@@ -517,7 +476,7 @@ rspamd_html_parse_tag_component(rspamd_mempool_t *pool,
return FALSE;
}
- p = rspamd_mempool_alloc (pool, end - begin);
+ p = (char *)rspamd_mempool_alloc (pool, end - begin);
memcpy(p, begin, end - begin);
len = rspamd_html_decode_entitles_inplace(p, end - begin);
@@ -604,7 +563,7 @@ static inline void
rspamd_html_parse_tag_content(rspamd_mempool_t *pool,
struct html_content *hc, struct html_tag *tag, const guchar *in,
gint *statep, guchar const **savep) {
- enum {
+ enum tag_parser_state {
parse_start = 0,
parse_name,
parse_attr_name,
@@ -622,11 +581,11 @@ rspamd_html_parse_tag_content(rspamd_mempool_t *pool,
spaces_after_param,
ignore_bad_tag
} state;
- struct html_tag_def *found;
+
gboolean store = FALSE;
struct html_tag_component *comp;
- state = *statep;
+ state = static_cast<enum tag_parser_state>(*statep);
switch (state) {
case parse_start:
@@ -660,27 +619,26 @@ rspamd_html_parse_tag_content(rspamd_mempool_t *pool,
}
else {
gchar *s;
- khiter_t k;
/* We CANNOT safely modify tag's name here, as it is already parsed */
- s = rspamd_mempool_alloc (pool, tag->name.len + 1);
+ s = (char *)rspamd_mempool_alloc (pool, tag->name.len + 1);
memcpy(s, tag->name.start, tag->name.len);
tag->name.len = rspamd_html_decode_entitles_inplace(s,
tag->name.len);
- tag->name.start = s;
+ tag->name.start = (guchar *)s;
tag->name.len = rspamd_str_lc_utf8(s, tag->name.len);
s[tag->name.len] = '\0';
- k = kh_get (tag_by_name, html_tag_by_name, s);
+ const auto *tag_def = rspamd::html::html_tags_defs.by_name({
+ (const char *)tag->name.start, tag->name.len});
- if (k == kh_end (html_tag_by_name)) {
+ if (tag_def == nullptr) {
hc->flags |= RSPAMD_HTML_FLAG_UNKNOWN_ELEMENTS;
tag->id = -1;
}
else {
- found = &kh_val (html_tag_by_name, k);
- tag->id = found->id;
- tag->flags = found->flags;
+ tag->id = tag_def->id;
+ tag->flags = tag_def->flags;
}
state = spaces_after_name;
@@ -881,13 +839,13 @@ rspamd_html_parse_tag_content(rspamd_mempool_t *pool,
gchar *s;
g_assert (tag->params != NULL);
- comp = g_queue_peek_tail(tag->params);
+ comp = (struct html_tag_component *)g_queue_peek_tail(tag->params);
g_assert (comp != NULL);
comp->len = in - *savep;
- s = rspamd_mempool_alloc (pool, comp->len);
+ s = (char *)rspamd_mempool_alloc (pool, comp->len);
memcpy(s, *savep, comp->len);
comp->len = rspamd_html_decode_entitles_inplace(s, comp->len);
- comp->start = s;
+ comp->start = (unsigned char *)s;
*savep = NULL;
}
}
@@ -903,13 +861,13 @@ rspamd_html_parse_tag_content(rspamd_mempool_t *pool,
gchar *s;
g_assert (tag->params != NULL);
- comp = g_queue_peek_tail(tag->params);
+ comp = (struct html_tag_component *)g_queue_peek_tail(tag->params);
g_assert (comp != NULL);
comp->len = in - *savep;
- s = rspamd_mempool_alloc (pool, comp->len);
+ s = (char *)rspamd_mempool_alloc (pool, comp->len);
memcpy(s, *savep, comp->len);
comp->len = rspamd_html_decode_entitles_inplace(s, comp->len);
- comp->start = s;
+ comp->start = (unsigned char *)s;
*savep = NULL;
}
}
@@ -930,13 +888,13 @@ rspamd_html_parse_tag_content(rspamd_mempool_t *pool,
gchar *s;
g_assert (tag->params != NULL);
- comp = g_queue_peek_tail(tag->params);
+ comp = (struct html_tag_component *)g_queue_peek_tail(tag->params);
g_assert (comp != NULL);
comp->len = in - *savep;
- s = rspamd_mempool_alloc (pool, comp->len);
+ s = (char *)rspamd_mempool_alloc (pool, comp->len);
memcpy(s, *savep, comp->len);
comp->len = rspamd_html_decode_entitles_inplace(s, comp->len);
- comp->start = s;
+ comp->start = (unsigned char *)s;
*savep = NULL;
}
}
@@ -989,7 +947,7 @@ rspamd_html_process_url(rspamd_mempool_t *pool, const gchar *start, guint len,
guint i;
gsize dlen;
gboolean has_bad_chars = FALSE, no_prefix = FALSE;
- static const gchar hexdigests[16] = "0123456789abcdef";
+ static const gchar hexdigests[] = "0123456789abcdef";
p = start;
@@ -1002,7 +960,7 @@ rspamd_html_process_url(rspamd_mempool_t *pool, const gchar *start, guint len,
}
if (comp) {
- comp->start = p;
+ comp->start = (guchar *)p;
comp->len = len;
}
@@ -1072,7 +1030,7 @@ rspamd_html_process_url(rspamd_mempool_t *pool, const gchar *start, guint len,
}
}
- decoded = rspamd_mempool_alloc (pool, dlen + 1);
+ decoded = (char *)rspamd_mempool_alloc (pool, dlen + 1);
d = decoded;
if (no_prefix) {
@@ -1104,7 +1062,7 @@ rspamd_html_process_url(rspamd_mempool_t *pool, const gchar *start, guint len,
*d = '\0';
dlen = d - decoded;
- url = rspamd_mempool_alloc0 (pool, sizeof(*url));
+ url = rspamd_mempool_alloc0_type(pool, struct rspamd_url);
rspamd_url_normalise_propagate_flags (pool, decoded, &dlen, saved_flags);
@@ -1132,7 +1090,7 @@ rspamd_html_process_url(rspamd_mempool_t *pool, const gchar *start, guint len,
decoded_len = url->urllen;
if (comp) {
- comp->start = decoded;
+ comp->start = (guchar *)decoded;
comp->len = decoded_len;
}
/* Spaces in href usually mean an attempt to obfuscate URL */
@@ -1161,10 +1119,10 @@ rspamd_html_process_url_tag(rspamd_mempool_t *pool, struct html_tag *tag,
cur = tag->params->head;
while (cur) {
- comp = cur->data;
+ comp = (struct html_tag_component *)cur->data;
if (comp->type == RSPAMD_HTML_COMPONENT_HREF && comp->len > 0) {
- start = comp->start;
+ start = (char *)comp->start;
len = comp->len;
/* Check base url */
@@ -1198,7 +1156,7 @@ rspamd_html_process_url_tag(rspamd_mempool_t *pool, struct html_tag *tag,
len++;
}
- buf = rspamd_mempool_alloc (pool, len + 1);
+ buf = (char *)rspamd_mempool_alloc (pool, len + 1);
rspamd_snprintf(buf, len + 1, "%*s%s%*s",
hc->base_url->urllen, hc->base_url->string,
need_slash ? "/" : "",
@@ -1210,7 +1168,7 @@ rspamd_html_process_url_tag(rspamd_mempool_t *pool, struct html_tag *tag,
orig_len = len;
len += hc->base_url->hostlen + hc->base_url->protocollen +
3 /* for :// */;
- buf = rspamd_mempool_alloc (pool, len + 1);
+ buf = (char *)rspamd_mempool_alloc (pool, len + 1);
rspamd_snprintf(buf, len + 1, "%*s://%*s/%*s",
hc->base_url->protocollen, hc->base_url->string,
hc->base_url->hostlen, rspamd_url_host_unsafe (hc->base_url),
@@ -1304,11 +1262,11 @@ rspamd_html_process_data_image(rspamd_mempool_t *pool,
* We ignore content type so far
*/
struct rspamd_image *parsed_image;
- const gchar *semicolon_pos = NULL, *end = src->start + src->len;
+ const gchar *semicolon_pos = NULL, *end = (gchar *)src->start + src->len;
- semicolon_pos = src->start;
+ semicolon_pos = (gchar *)src->start;
- while ((semicolon_pos = memchr(semicolon_pos, ';', end - semicolon_pos)) != NULL) {
+ while ((semicolon_pos = (gchar *)memchr(semicolon_pos, ';', end - semicolon_pos)) != NULL) {
if (end - semicolon_pos > sizeof("base64,")) {
if (memcmp(semicolon_pos + 1, "base64,", sizeof("base64,") - 1) == 0) {
const gchar *data_pos = semicolon_pos + sizeof("base64,");
@@ -1317,9 +1275,9 @@ rspamd_html_process_data_image(rspamd_mempool_t *pool,
rspamd_ftok_t inp;
decoded_len = (encoded_len / 4 * 3) + 12;
- decoded = rspamd_mempool_alloc (pool, decoded_len);
+ decoded = (gchar *)rspamd_mempool_alloc (pool, decoded_len);
rspamd_cryptobox_base64_decode(data_pos, encoded_len,
- decoded, &decoded_len);
+ reinterpret_cast<guchar *>(decoded), &decoded_len);
inp.begin = decoded;
inp.len = decoded_len;
@@ -1359,12 +1317,12 @@ rspamd_html_process_img_tag(rspamd_mempool_t *pool, struct html_tag *tag,
goffset pos;
cur = tag->params->head;
- img = rspamd_mempool_alloc0 (pool, sizeof(*img));
+ img = rspamd_mempool_alloc0_type (pool, struct html_image);
img->tag = tag;
tag->flags |= FL_IMAGE;
while (cur) {
- comp = cur->data;
+ comp = static_cast<html_tag_component *>(cur->data);
if (comp->type == RSPAMD_HTML_COMPONENT_HREF && comp->len > 0) {
fstr.begin = (gchar *) comp->start;
@@ -1417,19 +1375,20 @@ rspamd_html_process_img_tag(rspamd_mempool_t *pool, struct html_tag *tag,
}
}
else if (comp->type == RSPAMD_HTML_COMPONENT_HEIGHT) {
- rspamd_strtoul(comp->start, comp->len, &val);
+ rspamd_strtoul(reinterpret_cast<const gchar *>(comp->start), comp->len, &val);
img->height = val;
seen_height = TRUE;
}
else if (comp->type == RSPAMD_HTML_COMPONENT_WIDTH) {
- rspamd_strtoul(comp->start, comp->len, &val);
+ rspamd_strtoul(reinterpret_cast<const gchar *>(comp->start), comp->len, &val);
img->width = val;
seen_width = TRUE;
}
else if (comp->type == RSPAMD_HTML_COMPONENT_STYLE) {
/* Try to search for height= or width= in style tag */
if (!seen_height && comp->len > 0) {
- pos = rspamd_substring_search_caseless(comp->start, comp->len,
+ pos = rspamd_substring_search_caseless(reinterpret_cast<const gchar *>(comp->start),
+ comp->len,
"height", sizeof("height") - 1);
if (pos != -1) {
@@ -1437,7 +1396,8 @@ rspamd_html_process_img_tag(rspamd_mempool_t *pool, struct html_tag *tag,
while (p < comp->start + comp->len) {
if (g_ascii_isdigit (*p)) {
- rspamd_strtoul(p, comp->len - (p - comp->start), &val);
+ rspamd_strtoul(reinterpret_cast<const gchar *>(p),
+ comp->len - (p - comp->start), &val);
img->height = val;
break;
}
@@ -1451,7 +1411,8 @@ rspamd_html_process_img_tag(rspamd_mempool_t *pool, struct html_tag *tag,
}
if (!seen_width && comp->len > 0) {
- pos = rspamd_substring_search_caseless(comp->start, comp->len,
+ pos = rspamd_substring_search_caseless(reinterpret_cast<const gchar *>(comp->start),
+ comp->len,
"width", sizeof("width") - 1);
if (pos != -1) {
@@ -1459,7 +1420,8 @@ rspamd_html_process_img_tag(rspamd_mempool_t *pool, struct html_tag *tag,
while (p < comp->start + comp->len) {
if (g_ascii_isdigit (*p)) {
- rspamd_strtoul(p, comp->len - (p - comp->start), &val);
+ rspamd_strtoul(reinterpret_cast<const gchar *>(p),
+ comp->len - (p - comp->start), &val);
img->width = val;
break;
}
@@ -1475,14 +1437,14 @@ rspamd_html_process_img_tag(rspamd_mempool_t *pool, struct html_tag *tag,
else if (comp->type == RSPAMD_HTML_COMPONENT_ALT && comp->len > 0 && dest != NULL) {
if (dest->len > 0 && !g_ascii_isspace (dest->data[dest->len - 1])) {
/* Add a space */
- g_byte_array_append(dest, " ", 1);
+ g_byte_array_append(dest, reinterpret_cast<const guint8 *>(" "), 1);
}
g_byte_array_append(dest, comp->start, comp->len);
if (!g_ascii_isspace (dest->data[dest->len - 1])) {
/* Add a space */
- g_byte_array_append(dest, " ", 1);
+ g_byte_array_append(dest, reinterpret_cast<const guint8 *>(" "), 1);
}
}
@@ -1519,11 +1481,11 @@ rspamd_html_process_link_tag(rspamd_mempool_t *pool, struct html_tag *tag,
cur = tag->params->head;
while (cur) {
- comp = cur->data;
+ comp = static_cast<html_tag_component *>(cur->data);
if (comp->type == RSPAMD_HTML_COMPONENT_REL && comp->len > 0) {
if (comp->len == sizeof("icon") - 1 &&
- rspamd_lc_cmp(comp->start, "icon", sizeof("icon") - 1) == 0) {
+ rspamd_lc_cmp(reinterpret_cast<const gchar *>(comp->start), "icon", sizeof("icon") - 1) == 0) {
rspamd_html_process_img_tag(pool, tag, hc, url_set, part_urls, NULL);
}
@@ -1534,11 +1496,10 @@ rspamd_html_process_link_tag(rspamd_mempool_t *pool, struct html_tag *tag,
}
static void
-rspamd_html_process_color(const gchar *line, guint len, struct html_color *cl) {
+rspamd_html_process_color(const gchar *line, guint len, struct html_color *cl)
+{
const gchar *p = line, *end = line + len;
char hexbuf[7];
- rspamd_ftok_t search;
- struct html_color *el;
memset(cl, 0, sizeof(*cl));
@@ -1695,16 +1656,12 @@ stop:
}
}
else {
- khiter_t k;
- /* Compare color by name */
- search.begin = line;
- search.len = len;
-
- k = kh_get (color_by_name, html_color_by_name, &search);
+ auto maybe_color_value =
+ rspamd::css::css_value::maybe_color_from_string({line, len});
- if (k != kh_end (html_color_by_name)) {
- el = &kh_val (html_color_by_name, k);
- memcpy(cl, el, sizeof(*cl));
+ if (maybe_color_value.has_value()) {
+ auto color = maybe_color_value->to_color().value();
+ cl->d.val = color.to_number();
cl->d.comp.alpha = 255; /* Non transparent */
}
}
@@ -2021,21 +1978,21 @@ rspamd_html_process_block_tag(rspamd_mempool_t *pool, struct html_tag *tag,
GList *cur;
cur = tag->params->head;
- bl = rspamd_mempool_alloc0 (pool, sizeof(*bl));
+ bl = rspamd_mempool_alloc0_type (pool, struct html_block);
bl->tag = tag;
bl->visible = TRUE;
bl->font_size = (guint) -1;
bl->font_color.d.comp.alpha = 255;
while (cur) {
- comp = cur->data;
+ comp = static_cast<html_tag_component *>(cur->data);
if (comp->len > 0) {
switch (comp->type) {
case RSPAMD_HTML_COMPONENT_COLOR:
fstr.begin = (gchar *) comp->start;
fstr.len = comp->len;
- rspamd_html_process_color(comp->start, comp->len,
+ rspamd_html_process_color(reinterpret_cast<const gchar *>(comp->start), comp->len,
&bl->font_color);
msg_debug_html ("tag %*s; got color: %xd",
tag->name.len, tag->name.start, bl->font_color.d.val);
@@ -2043,7 +2000,7 @@ rspamd_html_process_block_tag(rspamd_mempool_t *pool, struct html_tag *tag,
case RSPAMD_HTML_COMPONENT_BGCOLOR:
fstr.begin = (gchar *) comp->start;
fstr.len = comp->len;
- rspamd_html_process_color(comp->start, comp->len,
+ rspamd_html_process_color(reinterpret_cast<const gchar *>(comp->start), comp->len,
&bl->background_color);
msg_debug_html ("tag %*s; got color: %xd",
tag->name.len, tag->name.start, bl->font_color.d.val);
@@ -2060,7 +2017,7 @@ rspamd_html_process_block_tag(rspamd_mempool_t *pool, struct html_tag *tag,
msg_debug_html ("tag: %*s; got style: %*s",
tag->name.len, tag->name.start,
(gint) bl->style.len, bl->style.start);
- rspamd_html_process_style(pool, bl, hc, comp->start, comp->len);
+ rspamd_html_process_style(pool, bl, hc, reinterpret_cast<const gchar *>(comp->start), comp->len);
break;
case RSPAMD_HTML_COMPONENT_CLASS:
fstr.begin = (gchar *) comp->start;
@@ -2116,8 +2073,9 @@ rspamd_html_check_displayed_url(rspamd_mempool_t *pool,
return;
}
- url->visible_part = rspamd_mempool_alloc (pool, dest->len - href_offset + 1);
- rspamd_strlcpy(url->visible_part, dest->data + href_offset,
+ url->visible_part = (gchar *)rspamd_mempool_alloc (pool, dest->len - href_offset + 1);
+ rspamd_strlcpy(url->visible_part,
+ reinterpret_cast<const gchar *>(dest->data + href_offset),
dest->len - href_offset + 1);
dlen = dest->len - href_offset;
@@ -2125,7 +2083,7 @@ rspamd_html_check_displayed_url(rspamd_mempool_t *pool,
url->visible_part = rspamd_string_unicode_trim_inplace(url->visible_part,
&dlen);
rspamd_html_url_is_phished(pool, url,
- url->visible_part,
+ reinterpret_cast<const guchar *>(url->visible_part),
dlen,
&url_found, &displayed_url);
@@ -2134,8 +2092,7 @@ rspamd_html_check_displayed_url(rspamd_mempool_t *pool,
}
if (exceptions && url_found) {
- ex = rspamd_mempool_alloc (pool,
- sizeof(*ex));
+ ex = rspamd_mempool_alloc_type (pool,struct rspamd_process_exception);
ex->pos = href_offset;
ex->len = dest->len - href_offset;
ex->type = RSPAMD_EXCEPTION_URL;
@@ -2175,14 +2132,14 @@ rspamd_html_check_displayed_url(rspamd_mempool_t *pool,
static gboolean
rspamd_html_propagate_lengths(GNode *node, gpointer _unused) {
GNode *child;
- struct html_tag *tag = node->data, *cld_tag;
+ struct html_tag *tag = static_cast<html_tag *>(node->data), *cld_tag;
if (tag) {
child = node->children;
/* Summarize content length from children */
while (child) {
- cld_tag = child->data;
+ cld_tag = static_cast<html_tag *>(child->data);
tag->content_length += cld_tag->content_length;
child = child->next;
}
@@ -2201,7 +2158,7 @@ rspamd_html_propagate_style(struct html_content *hc,
/* Propagate from the parent if needed */
- bl_parent = g_queue_peek_tail(blocks);
+ bl_parent = static_cast<html_block *>(g_queue_peek_tail(blocks));
if (bl_parent) {
if (!bl->background_color.valid) {
@@ -2268,7 +2225,6 @@ rspamd_html_propagate_style(struct html_content *hc,
}
}
-}
GByteArray*
rspamd_html_process_part_full (rspamd_mempool_t *pool,
@@ -2313,8 +2269,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
g_assert (hc != NULL);
g_assert (pool != NULL);
- rspamd_html_library_init ();
- hc->tags_seen = rspamd_mempool_alloc0 (pool, NBYTES (N_TAGS));
+ hc->tags_seen = (guchar *)rspamd_mempool_alloc0 (pool, NBYTES (N_TAGS));
/* Set white background color by default */
hc->bgcolor.d.comp.alpha = 0;
@@ -2373,7 +2328,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
state = tag_content;
substate = 0;
savep = NULL;
- cur_tag = rspamd_mempool_alloc0 (pool, sizeof (*cur_tag));
+ cur_tag = rspamd_mempool_alloc0_type (pool, struct html_tag);
cur_tag->params = g_queue_new ();
rspamd_mempool_add_destructor (pool,
(rspamd_mempool_destruct_t)g_queue_free, cur_tag->params);
@@ -2518,7 +2473,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
g_byte_array_append (dest, c, (p - c));
len = rspamd_html_decode_entitles_inplace (
- dest->data + old_offset,
+ reinterpret_cast<gchar *>(dest->data + old_offset),
p - c);
dest->len = dest->len + len - (p - c);
@@ -2549,7 +2504,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
/* Append one space if needed */
if (dest->len > 0 &&
!g_ascii_isspace (dest->data[dest->len - 1])) {
- g_byte_array_append (dest, " ", 1);
+ g_byte_array_append (dest, reinterpret_cast<const guint8 *>(" "), 1);
if (content_tag) {
if (content_tag->content_length == 0) {
/*
@@ -2583,7 +2538,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
g_byte_array_append (dest, c, (p - c));
len = rspamd_html_decode_entitles_inplace (
- dest->data + old_offset,
+ reinterpret_cast<gchar *>(dest->data + old_offset),
p - c);
dest->len = dest->len + len - (p - c);
@@ -2621,7 +2576,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
* We just search for the first </s substring and then pass
* the content to the parser (if needed)
*/
- goffset end_style = rspamd_substring_search (p, end - p,
+ goffset end_style = rspamd_substring_search (reinterpret_cast<const gchar *>(p), end - p,
"</", 2);
if (end_style == -1 || g_ascii_tolower (p[end_style + 2]) != 's') {
/* Invalid style */
@@ -2726,7 +2681,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
/* Handle newlines */
if (cur_tag->id == Tag_BR || cur_tag->id == Tag_HR) {
if (dest->len > 0 && dest->data[dest->len - 1] != '\n') {
- g_byte_array_append (dest, "\r\n", 2);
+ g_byte_array_append (dest, reinterpret_cast<const guint8 *>("\r\n"), 2);
if (content_tag) {
if (content_tag->content_length == 0) {
@@ -2750,7 +2705,7 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
cur_tag->id == Tag_TR ||
cur_tag->id == Tag_DIV)) {
if (dest->len > 0 && dest->data[dest->len - 1] != '\n') {
- g_byte_array_append (dest, "\r\n", 2);
+ g_byte_array_append (dest, reinterpret_cast<const guint8 *>("\r\n"), 2);
if (content_tag) {
if (content_tag->content_length == 0) {
@@ -2800,12 +2755,12 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
struct html_tag *prev_tag;
struct rspamd_url *prev_url;
- prev_tag = cur_level->prev->data;
+ prev_tag = static_cast<html_tag *>(cur_level->prev->data);
if (prev_tag->id == Tag_A &&
!(prev_tag->flags & (FL_CLOSING)) &&
prev_tag->extra) {
- prev_url = prev_tag->extra;
+ prev_url = static_cast<rspamd_url *>(prev_tag->extra);
rspamd_html_check_displayed_url (pool,
exceptions, url_set,
@@ -2868,11 +2823,11 @@ rspamd_html_process_part_full (rspamd_mempool_t *pool,
}
else {
rspamd_html_process_block_tag (pool, cur_tag, hc);
- bl = cur_tag->extra;
+ bl = static_cast<html_block *>(cur_tag->extra);
if (bl) {
rspamd_html_propagate_style (hc, cur_tag,
- cur_tag->extra, styles_blocks);
+ bl, styles_blocks);
/* Check visibility */
if (bl->font_size < 3 ||
@@ -2929,3 +2884,44 @@ rspamd_html_decode_entitles_inplace (gchar *s, gsize len)
{
return rspamd::html::decode_html_entitles_inplace(s, len);
}
+
+gint
+rspamd_html_tag_by_name(const gchar *name)
+{
+ const auto *td = rspamd::html::html_tags_defs.by_name(name);
+
+ if (td != nullptr) {
+ return td->id;
+ }
+
+ return -1;
+}
+
+gboolean
+rspamd_html_tag_seen(struct html_content *hc, const gchar *tagname)
+{
+ gint id;
+
+ g_assert (hc != NULL);
+ g_assert (hc->tags_seen != NULL);
+
+ id = rspamd_html_tag_by_name(tagname);
+
+ if (id != -1) {
+ return isset(hc->tags_seen, id);
+ }
+
+ return FALSE;
+}
+
+const gchar *
+rspamd_html_tag_by_id(gint id)
+{
+ const auto *td = rspamd::html::html_tags_defs.by_id(id);
+
+ if (td != nullptr) {
+ return td->name.c_str();
+ }
+
+ return nullptr;
+} \ No newline at end of file
diff --git a/src/libserver/html/html_colors.h b/src/libserver/html/html_colors.h
deleted file mode 100644
index aea197f6c..000000000
--- a/src/libserver/html/html_colors.h
+++ /dev/null
@@ -1,738 +0,0 @@
-/*-
- * Copyright 2016 Vsevolod Stakhov
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef SRC_LIBSERVER_HTML_COLORS_H_
-#define SRC_LIBSERVER_HTML_COLORS_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct rspamd_html_colorname {
- struct {
- guint8 r;
- guint8 g;
- guint8 b;
- } rgb;
- const gchar *name;
-};
-
-static const struct rspamd_html_colorname html_colornames[] = {
- {{240, 248, 255}, "aliceblue"},
- {{250, 235, 215}, "antiquewhite"},
- {{255, 239, 219}, "antiquewhite1"},
- {{238, 223, 204}, "antiquewhite2"},
- {{205, 192, 176}, "antiquewhite3"},
- {{139, 131, 120}, "antiquewhite4"},
- {{0, 255, 255}, "aqua"},
- {{127, 255, 212}, "aquamarine"},
- {{127, 255, 212}, "aquamarine1"},
- {{118, 238, 198}, "aquamarine2"},
- {{102, 205, 170}, "aquamarine3"},
- {{69, 139, 116}, "aquamarine4"},
- {{240, 255, 255}, "azure"},
- {{240, 255, 255}, "azure1"},
- {{224, 238, 238}, "azure2"},
- {{193, 205, 205}, "azure3"},
- {{131, 139, 139}, "azure4"},
- {{245, 245, 220}, "beige"},
- {{255, 228, 196}, "bisque"},
- {{255, 228, 196}, "bisque1"},
- {{238, 213, 183}, "bisque2"},
- {{205, 183, 158}, "bisque3"},
- {{139, 125, 107}, "bisque4"},
- {{0, 0, 0}, "black"},
- {{255, 235, 205}, "blanchedalmond"},
- {{0, 0, 255}, "blue"},
- {{0, 0, 255}, "blue1"},
- {{0, 0, 238}, "blue2"},
- {{0, 0, 205}, "blue3"},
- {{0, 0, 139}, "blue4"},
- {{138, 43, 226}, "blueviolet"},
- {{165, 42, 42}, "brown"},
- {{255, 64, 64}, "brown1"},
- {{238, 59, 59}, "brown2"},
- {{205, 51, 51}, "brown3"},
- {{139, 35, 35}, "brown4"},
- {{222, 184, 135}, "burlywood"},
- {{255, 211, 155}, "burlywood1"},
- {{238, 197, 145}, "burlywood2"},
- {{205, 170, 125}, "burlywood3"},
- {{139, 115, 85}, "burlywood4"},
- {{95, 158, 160}, "cadetblue"},
- {{152, 245, 255}, "cadetblue1"},
- {{142, 229, 238}, "cadetblue2"},
- {{122, 197, 205}, "cadetblue3"},
- {{83, 134, 139}, "cadetblue4"},
- {{127, 255, 0}, "chartreuse"},
- {{127, 255, 0}, "chartreuse1"},
- {{118, 238, 0}, "chartreuse2"},
- {{102, 205, 0}, "chartreuse3"},
- {{69, 139, 0}, "chartreuse4"},
- {{210, 105, 30}, "chocolate"},
- {{255, 127, 36}, "chocolate1"},
- {{238, 118, 33}, "chocolate2"},
- {{205, 102, 29}, "chocolate3"},
- {{139, 69, 19}, "chocolate4"},
- {{255, 127, 80}, "coral"},
- {{255, 114, 86}, "coral1"},
- {{238, 106, 80}, "coral2"},
- {{205, 91, 69}, "coral3"},
- {{139, 62, 47}, "coral4"},
- {{100, 149, 237}, "cornflowerblue"},
- {{255, 248, 220}, "cornsilk"},
- {{255, 248, 220}, "cornsilk1"},
- {{238, 232, 205}, "cornsilk2"},
- {{205, 200, 177}, "cornsilk3"},
- {{139, 136, 120}, "cornsilk4"},
- {{220, 20, 60}, "crimson"},
- {{0, 255, 255}, "cyan"},
- {{0, 255, 255}, "cyan1"},
- {{0, 238, 238}, "cyan2"},
- {{0, 205, 205}, "cyan3"},
- {{0, 139, 139}, "cyan4"},
- {{0, 0, 139}, "darkblue"},
- {{0, 139, 139}, "darkcyan"},
- {{184, 134, 11}, "darkgoldenrod"},
- {{255, 185, 15}, "darkgoldenrod1"},
- {{238, 173, 14}, "darkgoldenrod2"},
- {{205, 149, 12}, "darkgoldenrod3"},
- {{139, 101, 8}, "darkgoldenrod4"},
- {{169, 169, 169}, "darkgray"},
- {{0, 100, 0}, "darkgreen"},
- {{169, 169, 169}, "darkgrey"},
- {{189, 183, 107}, "darkkhaki"},
- {{139, 0, 139}, "darkmagenta"},
- {{85, 107, 47}, "darkolivegreen"},
- {{202, 255, 112}, "darkolivegreen1"},
- {{188, 238, 104}, "darkolivegreen2"},
- {{162, 205, 90}, "darkolivegreen3"},
- {{110, 139, 61}, "darkolivegreen4"},
- {{255, 140, 0}, "darkorange"},
- {{255, 127, 0}, "darkorange1"},
- {{238, 118, 0}, "darkorange2"},
- {{205, 102, 0}, "darkorange3"},
- {{139, 69, 0}, "darkorange4"},
- {{153, 50, 204}, "darkorchid"},
- {{191, 62, 255}, "darkorchid1"},
- {{178, 58, 238}, "darkorchid2"},
- {{154, 50, 205}, "darkorchid3"},
- {{104, 34, 139}, "darkorchid4"},
- {{139, 0, 0}, "darkred"},
- {{233, 150, 122}, "darksalmon"},
- {{143, 188, 143}, "darkseagreen"},
- {{193, 255, 193}, "darkseagreen1"},
- {{180, 238, 180}, "darkseagreen2"},
- {{155, 205, 155}, "darkseagreen3"},
- {{105, 139, 105}, "darkseagreen4"},
- {{72, 61, 139}, "darkslateblue"},
- {{47, 79, 79}, "darkslategray"},
- {{151, 255, 255}, "darkslategray1"},
- {{141, 238, 238}, "darkslategray2"},
- {{121, 205, 205}, "darkslategray3"},
- {{82, 139, 139}, "darkslategray4"},
- {{47, 79, 79}, "darkslategrey"},
- {{0, 206, 209}, "darkturquoise"},
- {{148, 0, 211}, "darkviolet"},
- {{255, 20, 147}, "deeppink"},
- {{255, 20, 147}, "deeppink1"},
- {{238, 18, 137}, "deeppink2"},
- {{205, 16, 118}, "deeppink3"},
- {{139, 10, 80}, "deeppink4"},
- {{0, 191, 255}, "deepskyblue"},
- {{0, 191, 255}, "deepskyblue1"},
- {{0, 178, 238}, "deepskyblue2"},
- {{0, 154, 205}, "deepskyblue3"},
- {{0, 104, 139}, "deepskyblue4"},
- {{105, 105, 105}, "dimgray"},
- {{105, 105, 105}, "dimgrey"},
- {{30, 144, 255}, "dodgerblue"},
- {{30, 144, 255}, "dodgerblue1"},
- {{28, 134, 238}, "dodgerblue2"},
- {{24, 116, 205}, "dodgerblue3"},
- {{16, 78, 139}, "dodgerblue4"},
- {{178, 34, 34}, "firebrick"},
- {{255, 48, 48}, "firebrick1"},
- {{238, 44, 44}, "firebrick2"},
- {{205, 38, 38}, "firebrick3"},
- {{139, 26, 26}, "firebrick4"},
- {{255, 250, 240}, "floralwhite"},
- {{34, 139, 34}, "forestgreen"},
- {{255, 0, 255}, "fuchsia"},
- {{220, 220, 220}, "gainsboro"},
- {{248, 248, 255}, "ghostwhite"},
- {{255, 215, 0}, "gold"},
- {{255, 215, 0}, "gold1"},
- {{238, 201, 0}, "gold2"},
- {{205, 173, 0}, "gold3"},
- {{139, 117, 0}, "gold4"},
- {{218, 165, 32}, "goldenrod"},
- {{255, 193, 37}, "goldenrod1"},
- {{238, 180, 34}, "goldenrod2"},
- {{205, 155, 29}, "goldenrod3"},
- {{139, 105, 20}, "goldenrod4"},
- {{190, 190, 190}, "gray"},
- {{0, 0, 0}, "gray0"},
- {{3, 3, 3}, "gray1"},
- {{26, 26, 26}, "gray10"},
- {{255, 255, 255}, "gray100"},
- {{28, 28, 28}, "gray11"},
- {{31, 31, 31}, "gray12"},
- {{33, 33, 33}, "gray13"},
- {{36, 36, 36}, "gray14"},
- {{38, 38, 38}, "gray15"},
- {{41, 41, 41}, "gray16"},
- {{43, 43, 43}, "gray17"},
- {{46, 46, 46}, "gray18"},
- {{48, 48, 48}, "gray19"},
- {{5, 5, 5}, "gray2"},
- {{51, 51, 51}, "gray20"},
- {{54, 54, 54}, "gray21"},
- {{56, 56, 56}, "gray22"},
- {{59, 59, 59}, "gray23"},
- {{61, 61, 61}, "gray24"},
- {{64, 64, 64}, "gray25"},
- {{66, 66, 66}, "gray26"},
- {{69, 69, 69}, "gray27"},
- {{71, 71, 71}, "gray28"},
- {{74, 74, 74}, "gray29"},
- {{8, 8, 8}, "gray3"},
- {{77, 77, 77}, "gray30"},
- {{79, 79, 79}, "gray31"},
- {{82, 82, 82}, "gray32"},
- {{84, 84, 84}, "gray33"},
- {{87, 87, 87}, "gray34"},
- {{89, 89, 89}, "gray35"},
- {{92, 92, 92}, "gray36"},
- {{94, 94, 94}, "gray37"},
- {{97, 97, 97}, "gray38"},
- {{99, 99, 99}, "gray39"},
- {{10, 10, 10}, "gray4"},
- {{102, 102, 102}, "gray40"},
- {{105, 105, 105}, "gray41"},
- {{107, 107, 107}, "gray42"},
- {{110, 110, 110}, "gray43"},
- {{112, 112, 112}, "gray44"},
- {{115, 115, 115}, "gray45"},
- {{117, 117, 117}, "gray46"},
- {{120, 120, 120}, "gray47"},
- {{122, 122, 122}, "gray48"},
- {{125, 125, 125}, "gray49"},
- {{13, 13, 13}, "gray5"},
- {{127, 127, 127}, "gray50"},
- {{130, 130, 130}, "gray51"},
- {{133, 133, 133}, "gray52"},
- {{135, 135, 135}, "gray53"},
- {{138, 138, 138}, "gray54"},
- {{140, 140, 140}, "gray55"},
- {{143, 143, 143}, "gray56"},
- {{145, 145, 145}, "gray57"},
- {{148, 148, 148}, "gray58"},
- {{150, 150, 150}, "gray59"},
- {{15, 15, 15}, "gray6"},
- {{153, 153, 153}, "gray60"},
- {{156, 156, 156}, "gray61"},
- {{158, 158, 158}, "gray62"},
- {{161, 161, 161}, "gray63"},
- {{163, 163, 163}, "gray64"},
- {{166, 166, 166}, "gray65"},
- {{168, 168, 168}, "gray66"},
- {{171, 171, 171}, "gray67"},
- {{173, 173, 173}, "gray68"},
- {{176, 176, 176}, "gray69"},
- {{18, 18, 18}, "gray7"},
- {{179, 179, 179}, "gray70"},
- {{181, 181, 181}, "gray71"},
- {{184, 184, 184}, "gray72"},
- {{186, 186, 186}, "gray73"},
- {{189, 189, 189}, "gray74"},
- {{191, 191, 191}, "gray75"},
- {{194, 194, 194}, "gray76"},
- {{196, 196, 196}, "gray77"},
- {{199, 199, 199}, "gray78"},
- {{201, 201, 201}, "gray79"},
- {{20, 20, 20}, "gray8"},
- {{204, 204, 204}, "gray80"},
- {{207, 207, 207}, "gray81"},
- {{209, 209, 209}, "gray82"},
- {{212, 212, 212}, "gray83"},
- {{214, 214, 214}, "gray84"},
- {{217, 217, 217}, "gray85"},
- {{219, 219, 219}, "gray86"},
- {{222, 222, 222}, "gray87"},
- {{224, 224, 224}, "gray88"},
- {{227, 227, 227}, "gray89"},
- {{23, 23, 23}, "gray9"},
- {{229, 229, 229}, "gray90"},
- {{232, 232, 232}, "gray91"},
- {{235, 235, 235}, "gray92"},
- {{237, 237, 237}, "gray93"},
- {{240, 240, 240}, "gray94"},
- {{242, 242, 242}, "gray95"},
- {{245, 245, 245}, "gray96"},
- {{247, 247, 247}, "gray97"},
- {{250, 250, 250}, "gray98"},
- {{252, 252, 252}, "gray99"},
- {{0, 255, 0}, "green"},
- {{0, 255, 0}, "green1"},
- {{0, 238, 0}, "green2"},
- {{0, 205, 0}, "green3"},
- {{0, 139, 0}, "green4"},
- {{173, 255, 47}, "greenyellow"},
- {{190, 190, 190}, "grey"},
- {{0, 0, 0}, "grey0"},
- {{3, 3, 3}, "grey1"},
- {{26, 26, 26}, "grey10"},
- {{255, 255, 255}, "grey100"},
- {{28, 28, 28}, "grey11"},
- {{31, 31, 31}, "grey12"},
- {{33, 33, 33}, "grey13"},
- {{36, 36, 36}, "grey14"},
- {{38, 38, 38}, "grey15"},
- {{41, 41, 41}, "grey16"},
- {{43, 43, 43}, "grey17"},
- {{46, 46, 46}, "grey18"},
- {{48, 48, 48}, "grey19"},
- {{5, 5, 5}, "grey2"},
- {{51, 51, 51}, "grey20"},
- {{54, 54, 54}, "grey21"},
- {{56, 56, 56}, "grey22"},
- {{59, 59, 59}, "grey23"},
- {{61, 61, 61}, "grey24"},
- {{64, 64, 64}, "grey25"},
- {{66, 66, 66}, "grey26"},
- {{69, 69, 69}, "grey27"},
- {{71, 71, 71}, "grey28"},
- {{74, 74, 74}, "grey29"},
- {{8, 8, 8}, "grey3"},
- {{77, 77, 77}, "grey30"},
- {{79, 79, 79}, "grey31"},
- {{82, 82, 82}, "grey32"},
- {{84, 84, 84}, "grey33"},
- {{87, 87, 87}, "grey34"},
- {{89, 89, 89}, "grey35"},
- {{92, 92, 92}, "grey36"},
- {{94, 94, 94}, "grey37"},
- {{97, 97, 97}, "grey38"},
- {{99, 99, 99}, "grey39"},
- {{10, 10, 10}, "grey4"},
- {{102, 102, 102}, "grey40"},
- {{105, 105, 105}, "grey41"},
- {{107, 107, 107}, "grey42"},
- {{110, 110, 110}, "grey43"},
- {{112, 112, 112}, "grey44"},
- {{115, 115, 115}, "grey45"},
- {{117, 117, 117}, "grey46"},
- {{120, 120, 120}, "grey47"},
- {{122, 122, 122}, "grey48"},
- {{125, 125, 125}, "grey49"},
- {{13, 13, 13}, "grey5"},
- {{127, 127, 127}, "grey50"},
- {{130, 130, 130}, "grey51"},
- {{133, 133, 133}, "grey52"},
- {{135, 135, 135}, "grey53"},
- {{138, 138, 138}, "grey54"},
- {{140, 140, 140}, "grey55"},
- {{143, 143, 143}, "grey56"},
- {{145, 145, 145}, "grey57"},
- {{148, 148, 148}, "grey58"},
- {{150, 150, 150}, "grey59"},
- {{15, 15, 15}, "grey6"},
- {{153, 153, 153}, "grey60"},
- {{156, 156, 156}, "grey61"},
- {{158, 158, 158}, "grey62"},
- {{161, 161, 161}, "grey63"},
- {{163, 163, 163}, "grey64"},
- {{166, 166, 166}, "grey65"},
- {{168, 168, 168}, "grey66"},
- {{171, 171, 171}, "grey67"},
- {{173, 173, 173}, "grey68"},
- {{176, 176, 176}, "grey69"},
- {{18, 18, 18}, "grey7"},
- {{179, 179, 179}, "grey70"},
- {{181, 181, 181}, "grey71"},
- {{184, 184, 184}, "grey72"},
- {{186, 186, 186}, "grey73"},
- {{189, 189, 189}, "grey74"},
- {{191, 191, 191}, "grey75"},
- {{194, 194, 194}, "grey76"},
- {{196, 196, 196}, "grey77"},
- {{199, 199, 199}, "grey78"},
- {{201, 201, 201}, "grey79"},
- {{20, 20, 20}, "grey8"},
- {{204, 204, 204}, "grey80"},
- {{207, 207, 207}, "grey81"},
- {{209, 209, 209}, "grey82"},
- {{212, 212, 212}, "grey83"},
- {{214, 214, 214}, "grey84"},
- {{217, 217, 217}, "grey85"},
- {{219, 219, 219}, "grey86"},
- {{222, 222, 222}, "grey87"},
- {{224, 224, 224}, "grey88"},
- {{227, 227, 227}, "grey89"},
- {{23, 23, 23}, "grey9"},
- {{229, 229, 229}, "grey90"},
- {{232, 232, 232}, "grey91"},
- {{235, 235, 235}, "grey92"},
- {{237, 237, 237}, "grey93"},
- {{240, 240, 240}, "grey94"},
- {{242, 242, 242}, "grey95"},
- {{245, 245, 245}, "grey96"},
- {{247, 247, 247}, "grey97"},
- {{250, 250, 250}, "grey98"},
- {{252, 252, 252}, "grey99"},
- {{240, 255, 240}, "honeydew"},
- {{240, 255, 240}, "honeydew1"},
- {{224, 238, 224}, "honeydew2"},
- {{193, 205, 193}, "honeydew3"},
- {{131, 139, 131}, "honeydew4"},
- {{255, 105, 180}, "hotpink"},
- {{255, 110, 180}, "hotpink1"},
- {{238, 106, 167}, "hotpink2"},
- {{205, 96, 144}, "hotpink3"},
- {{139, 58, 98}, "hotpink4"},
- {{205, 92, 92}, "indianred"},
- {{255, 106, 106}, "indianred1"},
- {{238, 99, 99}, "indianred2"},
- {{205, 85, 85}, "indianred3"},
- {{139, 58, 58}, "indianred4"},
- {{75, 0, 130}, "indigo"},
- {{255, 255, 240}, "ivory"},
- {{255, 255, 240}, "ivory1"},
- {{238, 238, 224}, "ivory2"},
- {{205, 205, 193}, "ivory3"},
- {{139, 139, 131}, "ivory4"},
- {{240, 230, 140}, "khaki"},
- {{255, 246, 143}, "khaki1"},
- {{238, 230, 133}, "khaki2"},
- {{205, 198, 115}, "khaki3"},
- {{139, 134, 78}, "khaki4"},
- {{230, 230, 250}, "lavender"},
- {{255, 240, 245}, "lavenderblush"},
- {{255, 240, 245}, "lavenderblush1"},
- {{238, 224, 229}, "lavenderblush2"},
- {{205, 193, 197}, "lavenderblush3"},
- {{139, 131, 134}, "lavenderblush4"},
- {{124, 252, 0}, "lawngreen"},
- {{255, 250, 205}, "lemonchiffon"},
- {{255, 250, 205}, "lemonchiffon1"},
- {{238, 233, 191}, "lemonchiffon2"},
- {{205, 201, 165}, "lemonchiffon3"},
- {{139, 137, 112}, "lemonchiffon4"},
- {{173, 216, 230}, "lightblue"},
- {{191, 239, 255}, "lightblue1"},
- {{178, 223, 238}, "lightblue2"},
- {{154, 192, 205}, "lightblue3"},
- {{104, 131, 139}, "lightblue4"},
- {{240, 128, 128}, "lightcoral"},
- {{224, 255, 255}, "lightcyan"},
- {{224, 255, 255}, "lightcyan1"},
- {{209, 238, 238}, "lightcyan2"},
- {{180, 205, 205}, "lightcyan3"},
- {{122, 139, 139}, "lightcyan4"},
- {{238, 221, 130}, "lightgoldenrod"},
- {{255, 236, 139}, "lightgoldenrod1"},
- {{238, 220, 130}, "lightgoldenrod2"},
- {{205, 190, 112}, "lightgoldenrod3"},
- {{139, 129, 76}, "lightgoldenrod4"},
- {{250, 250, 210}, "lightgoldenrodyellow"},
- {{211, 211, 211}, "lightgray"},
- {{144, 238, 144}, "lightgreen"},
- {{211, 211, 211}, "lightgrey"},
- {{255, 182, 193}, "lightpink"},
- {{255, 174, 185}, "lightpink1"},
- {{238, 162, 173}, "lightpink2"},
- {{205, 140, 149}, "lightpink3"},
- {{139, 95, 101}, "lightpink4"},
- {{255, 160, 122}, "lightsalmon"},
- {{255, 160, 122}, "lightsalmon1"},
- {{238, 149, 114}, "lightsalmon2"},
- {{205, 129, 98}, "lightsalmon3"},
- {{139, 87, 66}, "lightsalmon4"},
- {{32, 178, 170}, "lightseagreen"},
- {{135, 206, 250}, "lightskyblue"},
- {{176, 226, 255}, "lightskyblue1"},
- {{164, 211, 238}, "lightskyblue2"},
- {{141, 182, 205}, "lightskyblue3"},
- {{96, 123, 139}, "lightskyblue4"},
- {{132, 112, 255}, "lightslateblue"},
- {{119, 136, 153}, "lightslategray"},
- {{119, 136, 153}, "lightslategrey"},
- {{176, 196, 222}, "lightsteelblue"},
- {{202, 225, 255}, "lightsteelblue1"},
- {{188, 210, 238}, "lightsteelblue2"},
- {{162, 181, 205}, "lightsteelblue3"},
- {{110, 123, 139}, "lightsteelblue4"},
- {{255, 255, 224}, "lightyellow"},
- {{255, 255, 224}, "lightyellow1"},
- {{238, 238, 209}, "lightyellow2"},
- {{205, 205, 180}, "lightyellow3"},
- {{139, 139, 122}, "lightyellow4"},
- {{0, 255, 0}, "lime"},
- {{50, 205, 50}, "limegreen"},
- {{250, 240, 230}, "linen"},
- {{255, 0, 255}, "magenta"},
- {{255, 0, 255}, "magenta1"},
- {{238, 0, 238}, "magenta2"},
- {{205, 0, 205}, "magenta3"},
- {{139, 0, 139}, "magenta4"},
- {{176, 48, 96}, "maroon"},
- {{255, 52, 179}, "maroon1"},
- {{238, 48, 167}, "maroon2"},
- {{205, 41, 144}, "maroon3"},
- {{139, 28, 98}, "maroon4"},
- {{102, 205, 170}, "mediumaquamarine"},
- {{0, 0, 205}, "mediumblue"},
- {{186, 85, 211}, "mediumorchid"},
- {{224, 102, 255}, "mediumorchid1"},
- {{209, 95, 238}, "mediumorchid2"},
- {{180, 82, 205}, "mediumorchid3"},
- {{122, 55, 139}, "mediumorchid4"},
- {{147, 112, 219}, "mediumpurple"},
- {{171, 130, 255}, "mediumpurple1"},
- {{159, 121, 238}, "mediumpurple2"},
- {{137, 104, 205}, "mediumpurple3"},
- {{93, 71, 139}, "mediumpurple4"},
- {{60, 179, 113}, "mediumseagreen"},
- {{123, 104, 238}, "mediumslateblue"},
- {{0, 250, 154}, "mediumspringgreen"},
- {{72, 209, 204}, "mediumturquoise"},
- {{199, 21, 133}, "mediumvioletred"},
- {{25, 25, 112}, "midnightblue"},
- {{245, 255, 250}, "mintcream"},
- {{255, 228, 225}, "mistyrose"},
- {{255, 228, 225}, "mistyrose1"},
- {{238, 213, 210}, "mistyrose2"},
- {{205, 183, 181}, "mistyrose3"},
- {{139, 125, 123}, "mistyrose4"},
- {{255, 228, 181}, "moccasin"},
- {{255, 222, 173}, "navajowhite"},
- {{255, 222, 173}, "navajowhite1"},
- {{238, 207, 161}, "navajowhite2"},
- {{205, 179, 139}, "navajowhite3"},
- {{139, 121, 94}, "navajowhite4"},
- {{0, 0, 128}, "navy"},
- {{0, 0, 128}, "navyblue"},
- {{253, 245, 230}, "oldlace"},
- {{128, 128, 0}, "olive"},
- {{107, 142, 35}, "olivedrab"},
- {{192, 255, 62}, "olivedrab1"},
- {{179, 238, 58}, "olivedrab2"},
- {{154, 205, 50}, "olivedrab3"},
- {{105, 139, 34}, "olivedrab4"},
- {{255, 165, 0}, "orange"},
- {{255, 165, 0}, "orange1"},
- {{238, 154, 0}, "orange2"},
- {{205, 133, 0}, "orange3"},
- {{139, 90, 0}, "orange4"},
- {{255, 69, 0}, "orangered"},
- {{255, 69, 0}, "orangered1"},
- {{238, 64, 0}, "orangered2"},
- {{205, 55, 0}, "orangered3"},
- {{139, 37, 0}, "orangered4"},
- {{218, 112, 214}, "orchid"},
- {{255, 131, 250}, "orchid1"},
- {{238, 122, 233}, "orchid2"},
- {{205, 105, 201}, "orchid3"},
- {{139, 71, 137}, "orchid4"},
- {{238, 232, 170}, "palegoldenrod"},
- {{152, 251, 152}, "palegreen"},
- {{154, 255, 154}, "palegreen1"},
- {{144, 238, 144}, "palegreen2"},
- {{124, 205, 124}, "palegreen3"},
- {{84, 139, 84}, "palegreen4"},
- {{175, 238, 238}, "paleturquoise"},
- {{187, 255, 255}, "paleturquoise1"},
- {{174, 238, 238}, "paleturquoise2"},
- {{150, 205, 205}, "paleturquoise3"},
- {{102, 139, 139}, "paleturquoise4"},
- {{219, 112, 147}, "palevioletred"},
- {{255, 130, 171}, "palevioletred1"},
- {{238, 121, 159}, "palevioletred2"},
- {{205, 104, 137}, "palevioletred3"},
- {{139, 71, 93}, "palevioletred4"},
- {{255, 239, 213}, "papayawhip"},
- {{255, 218, 185}, "peachpuff"},
- {{255, 218, 185}, "peachpuff1"},
- {{238, 203, 173}, "peachpuff2"},
- {{205, 175, 149}, "peachpuff3"},
- {{139, 119, 101}, "peachpuff4"},
- {{205, 133, 63}, "peru"},
- {{255, 192, 203}, "pink"},
- {{255, 181, 197}, "pink1"},
- {{238, 169, 184}, "pink2"},
- {{205, 145, 158}, "pink3"},
- {{139, 99, 108}, "pink4"},
- {{221, 160, 221}, "plum"},
- {{255, 187, 255}, "plum1"},
- {{238, 174, 238}, "plum2"},
- {{205, 150, 205}, "plum3"},
- {{139, 102, 139}, "plum4"},
- {{176, 224, 230}, "powderblue"},
- {{160, 32, 240}, "purple"},
- {{155, 48, 255}, "purple1"},
- {{145, 44, 238}, "purple2"},
- {{125, 38, 205}, "purple3"},
- {{85, 26, 139}, "purple4"},
- {{102, 51, 153}, "rebeccapurple"},
- {{255, 0, 0}, "red"},
- {{255, 0, 0}, "red1"},
- {{238, 0, 0}, "red2"},
- {{205, 0, 0}, "red3"},
- {{139, 0, 0}, "red4"},
- {{188, 143, 143}, "rosybrown"},
- {{255, 193, 193}, "rosybrown1"},
- {{238, 180, 180}, "rosybrown2"},
- {{205, 155, 155}, "rosybrown3"},
- {{139, 105, 105}, "rosybrown4"},
- {{65, 105, 225}, "royalblue"},
- {{72, 118, 255}, "royalblue1"},
- {{67, 110, 238}, "royalblue2"},
- {{58, 95, 205}, "royalblue3"},
- {{39, 64, 139}, "royalblue4"},
- {{139, 69, 19}, "saddlebrown"},
- {{250, 128, 114}, "salmon"},
- {{255, 140, 105}, "salmon1"},
- {{238, 130, 98}, "salmon2"},
- {{205, 112, 84}, "salmon3"},
- {{139, 76, 57}, "salmon4"},
- {{244, 164, 96}, "sandybrown"},
- {{46, 139, 87}, "seagreen"},
- {{84, 255, 159}, "seagreen1"},
- {{78, 238, 148}, "seagreen2"},
- {{67, 205, 128}, "seagreen3"},
- {{46, 139, 87}, "seagreen4"},
- {{255, 245, 238}, "seashell"},
- {{255, 245, 238}, "seashell1"},
- {{238, 229, 222}, "seashell2"},
- {{205, 197, 191}, "seashell3"},
- {{139, 134, 130}, "seashell4"},
- {{160, 82, 45}, "sienna"},
- {{255, 130, 71}, "sienna1"},
- {{238, 121, 66}, "sienna2"},
- {{205, 104, 57}, "sienna3"},
- {{139, 71, 38}, "sienna4"},
- {{192, 192, 192}, "silver"},
- {{135, 206, 235}, "skyblue"},
- {{135, 206, 255}, "skyblue1"},
- {{126, 192, 238}, "skyblue2"},
- {{108, 166, 205}, "skyblue3"},
- {{74, 112, 139}, "skyblue4"},
- {{106, 90, 205}, "slateblue"},
- {{131, 111, 255}, "slateblue1"},
- {{122, 103, 238}, "slateblue2"},
- {{105, 89, 205}, "slateblue3"},
- {{71, 60, 139}, "slateblue4"},
- {{112, 128, 144}, "slategray"},
- {{198, 226, 255}, "slategray1"},
- {{185, 211, 238}, "slategray2"},
- {{159, 182, 205}, "slategray3"},
- {{108, 123, 139}, "slategray4"},
- {{112, 128, 144}, "slategrey"},
- {{255, 250, 250}, "snow"},
- {{255, 250, 250}, "snow1"},
- {{238, 233, 233}, "snow2"},
- {{205, 201, 201}, "snow3"},
- {{139, 137, 137}, "snow4"},
- {{0, 255, 127}, "springgreen"},
- {{0, 255, 127}, "springgreen1"},
- {{0, 238, 118}, "springgreen2"},
- {{0, 205, 102}, "springgreen3"},
- {{0, 139, 69}, "springgreen4"},
- {{70, 130, 180}, "steelblue"},
- {{99, 184, 255}, "steelblue1"},
- {{92, 172, 238}, "steelblue2"},
- {{79, 148, 205}, "steelblue3"},
- {{54, 100, 139}, "steelblue4"},
- {{210, 180, 140}, "tan"},
- {{255, 165, 79}, "tan1"},
- {{238, 154, 73}, "tan2"},
- {{205, 133, 63}, "tan3"},
- {{139, 90, 43}, "tan4"},
- {{0, 128, 128}, "teal"},
- {{216, 191, 216}, "thistle"},
- {{255, 225, 255}, "thistle1"},
- {{238, 210, 238}, "thistle2"},
- {{205, 181, 205}, "thistle3"},
- {{139, 123, 139}, "thistle4"},
- {{255, 99, 71}, "tomato"},
- {{255, 99, 71}, "tomato1"},
- {{238, 92, 66}, "tomato2"},
- {{205, 79, 57}, "tomato3"},
- {{139, 54, 38}, "tomato4"},
- {{64, 224, 208}, "turquoise"},
- {{0, 245, 255}, "turquoise1"},
- {{0, 229, 238}, "turquoise2"},
- {{0, 197, 205}, "turquoise3"},
- {{0, 134, 139}, "turquoise4"},
- {{238, 130, 238}, "violet"},
- {{208, 32, 144}, "violetred"},
- {{255, 62, 150}, "violetred1"},
- {{238, 58, 140}, "violetred2"},
- {{205, 50, 120}, "violetred3"},
- {{139, 34, 82}, "violetred4"},
- {{128, 128, 128}, "webgray"},
- {{0, 128, 0}, "webgreen"},
- {{128, 128, 128}, "webgrey"},
- {{128, 0, 0}, "webmaroon"},
- {{128, 0, 128}, "webpurple"},
- {{245, 222, 179}, "wheat"},
- {{255, 231, 186}, "wheat1"},
- {{238, 216, 174}, "wheat2"},
- {{205, 186, 150}, "wheat3"},
- {{139, 126, 102}, "wheat4"},
- {{255, 255, 255}, "white"},
- {{245, 245, 245}, "whitesmoke"},
- {{190, 190, 190}, "x11gray"},
- {{0, 255, 0}, "x11green"},
- {{190, 190, 190}, "x11grey"},
- {{176, 48, 96}, "x11maroon"},
- {{160, 32, 240}, "x11purple"},
- {{255, 255, 0}, "yellow"},
- {{255, 255, 0}, "yellow1"},
- {{238, 238, 0}, "yellow2"},
- {{205, 205, 0}, "yellow3"},
- {{139, 139, 0}, "yellow4"},
- {{154, 205, 50}, "yellowgreen"},
- {{180, 180, 180}, "activeborder"},
- {{153, 180, 209}, "activecaption"},
- {{171, 171, 171}, "appworkspace"},
- {{0, 0, 0}, "background"},
- {{255, 255, 255}, "buttonhighlight"},
- {{160, 160, 160}, "buttonshadow"},
- {{0, 0, 0}, "captiontext"},
- {{244, 247, 252}, "inactiveborder"},
- {{191, 205, 219}, "inactivecaption"},
- {{0, 0, 0}, "inactivecaptiontext"},
- {{255, 255, 225}, "infobackground"},
- {{0, 0, 0}, "infotext"},
- {{240, 240, 240}, "menu"},
- {{0, 0, 0}, "menutext"},
- {{200, 200, 200}, "scrollbar"},
- {{0, 0, 0}, "threeddarkshadow"},
- {{0, 0, 0}, "threedface"},
- {{0, 0, 0}, "threedhighlight"},
- {{0, 0, 0}, "threedlightshadow"},
- {{0, 0, 0}, "threedshadow"},
- {{255, 255, 255}, "window"},
- {{100, 100, 100}, "windowframe"},
- {{0, 0, 0}, "windowtext"},
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* SRC_LIBSERVER_HTML_COLORS_H_ */
diff --git a/src/libserver/html/html_tag_defs.hxx b/src/libserver/html/html_tag_defs.hxx
index ef3d8d99e..5a552066d 100644
--- a/src/libserver/html/html_tag_defs.hxx
+++ b/src/libserver/html/html_tag_defs.hxx
@@ -172,7 +172,7 @@ public:
}
}
- auto by_name(std::string_view name) -> const html_tag_def* {
+ auto by_name(std::string_view name) const -> const html_tag_def* {
auto it = tag_by_name.find(name);
if (it != tag_by_name.end()) {
@@ -182,8 +182,8 @@ public:
return nullptr;
}
- auto by_id(tag_id_t id) -> const html_tag_def* {
- auto it = tag_by_id.find(id);
+ auto by_id(int id) const -> const html_tag_def* {
+ auto it = tag_by_id.find(static_cast<tag_id_t>(id));
if (it != tag_by_id.end()) {
return &(it->second);
}