]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Implement binary string checks
authorVsevolod Stakhov <vsevolod@rspamd.com>
Fri, 1 Jul 2022 20:14:52 +0000 (21:14 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Fri, 1 Jul 2022 20:14:52 +0000 (21:14 +0100)
Issue: #4204

src/lua/lua_common.h
src/lua/lua_text.c

index a1f62cdb6df34d57982dc3e4439c58f98689ef00..c961d37ddfe96b191a58f50509d8633d44f96972 100644 (file)
@@ -112,6 +112,7 @@ struct rspamd_lua_ip {
 #define RSPAMD_TEXT_FLAG_WIPE (1u << 2u)
 #define RSPAMD_TEXT_FLAG_SYSMALLOC (1u << 3u)
 #define RSPAMD_TEXT_FLAG_FAKE (1u << 4u)
+#define RSPAMD_TEXT_FLAG_BINARY (1u << 5u)
 struct rspamd_lua_text {
        const gchar *start;
        guint len;
@@ -276,6 +277,12 @@ struct rspamd_lua_text *lua_check_text_or_string (lua_State *L, gint pos);
 /* Creates and *pushes* new rspamd text, data is copied if  RSPAMD_TEXT_FLAG_OWN is in flags*/
 struct rspamd_lua_text *lua_new_text (lua_State *L, const gchar *start,
                                                                          gsize len, gboolean own);
+/**
+ * Checks if a text has binary characters (non ascii and non-utf8 characters)
+ * @param t
+ * @return
+ */
+bool lua_is_text_binary(struct rspamd_lua_text *t);
 
 struct rspamd_lua_regexp *lua_check_regexp (lua_State *L, gint pos);
 
index 19317bf59e99c1f8df1a9c652159e4954e2ce2d3..04a4169422afd7a01ffd9107892896cb2bb1b3ff 100644 (file)
@@ -348,6 +348,23 @@ lua_new_text (lua_State *L, const gchar *start, gsize len, gboolean own)
        return t;
 }
 
+bool
+lua_is_text_binary(struct rspamd_lua_text *t)
+{
+       if (t == NULL || t->len == 0) {
+               return false;
+       }
+
+       if (rspamd_str_has_8bit(t->start, t->len)) {
+               if (rspamd_fast_utf8_validate(t->start, t->len) == 0) {
+                       return true;
+               }
+               return false;
+       }
+
+       return true;
+}
+
 
 static gint
 lua_text_fromstring (lua_State *L)