From: Vsevolod Stakhov Date: Fri, 29 Jan 2021 11:38:56 +0000 (+0000) Subject: [Minor] Css: Add a simple testing logic for css parsing X-Git-Tag: 3.0~721 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=67857e64c268fe2dc04e425c74e37c4859edfd58;p=thirdparty%2Frspamd.git [Minor] Css: Add a simple testing logic for css parsing --- diff --git a/src/libserver/css/css.cxx b/src/libserver/css/css.cxx index bd148cecda..6633b68fd8 100644 --- a/src/libserver/css/css.cxx +++ b/src/libserver/css/css.cxx @@ -17,14 +17,23 @@ #include "css.h" #include "css.hxx" #include "css_style.hxx" +#include "css_parser.hxx" rspamd_css -rspamd_css_parse_style (const guchar *begin, gsize len, GError **err) +rspamd_css_parse_style (rspamd_mempool_t *pool, const guchar *begin, gsize len, + GError **err) { - rspamd::css::css_style_sheet *style = nullptr; - - - return reinterpret_cast(style); + auto parse_res = rspamd::css::parse_css(pool, {(const char* )begin, len}); + + if (parse_res.has_value()) { + return reinterpret_cast(parse_res.value().release()); + } + else { + g_set_error(err, g_quark_from_static_string("css"), + static_cast(parse_res.error().type), + "parse error"); + return nullptr; + } } namespace rspamd::css { diff --git a/test/lua/unit/css.lua b/test/lua/unit/css.lua index 8d4d4469bf..ad7d2762c6 100644 --- a/test/lua/unit/css.lua +++ b/test/lua/unit/css.lua @@ -7,11 +7,15 @@ const char *rspamd_css_unescape (void *pool, const char *begin, size_t len, size_t *olen); +void* rspamd_css_parse_style (void *pool, + const char *begin, + size_t len, void *err); ]] local cases = { {'#\\31 a2b3c {', '#1a2b3c {'} } + for _,t in ipairs(cases) do test("Unescape " .. t[1], function() local olen = ffi.new('size_t[1]') @@ -20,4 +24,19 @@ const char *rspamd_css_unescape (void *pool, assert_equal(escaped, t[2], escaped .. " not equal " .. t[2]) end) end + + local cases = {[[ +p { + color: red; + text-align: center; +} +]] + } + local NULL = ffi.new 'void*' + for i,t in ipairs(cases) do + test("Parse css sample " .. i, function() + local escaped = ffi.C.rspamd_css_parse_style(pool:topointer(), t, #t, NULL) + assert_not_null(escaped) + end) + end end) \ No newline at end of file