From: Vsevolod Stakhov Date: Tue, 20 Dec 2016 12:59:54 +0000 (+0000) Subject: [Test] Add fuzz testing for rfc2047 X-Git-Tag: 1.5.0~537 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a9beac22cea7a7053dd3b4081e9226441c7c5595;p=thirdparty%2Frspamd.git [Test] Add fuzz testing for rfc2047 --- diff --git a/test/lua/unit/rfc2047.lua b/test/lua/unit/rfc2047.lua index 15235f8af2..9ddab000ce 100644 --- a/test/lua/unit/rfc2047.lua +++ b/test/lua/unit/rfc2047.lua @@ -48,8 +48,36 @@ context("RFC2047 decoding", function() for _,c in ipairs(cases) do local res = ffi.C.rspamd_mime_header_decode(pool, c[1], #c[1]) res = ffi.string(res) - assert_equal(res, c[2], res .. " not equal " .. c[2]) assert_not_nil(res, "cannot decode " .. c[1]) + assert_equal(res, c[2], res .. " not equal " .. c[2]) + + end + + ffi.C.rspamd_mempool_delete(pool) + end) + test("Fuzz test for rfc2047 tokens", function() + local util = require("rspamd_util") + local pool = ffi.C.rspamd_mempool_new(4096, "lua") + local str = "Тест Тест Тест Тест Тест" + + for i = 0,1000 do + local r1 = math.random() + local r2 = math.random() + local sl1 = #str / 2.0 * r1 + local sl2 = #str / 2.0 * r2 + + local s1 = tostring(util.encode_base64(string.sub(str, 1, sl1))) + local s2 = tostring(util.encode_base64(string.sub(str, sl1 + 1, sl2))) + local s3 = tostring(util.encode_base64(string.sub(str, sl2 + 1))) + + if #s1 > 0 and #s2 > 0 and #s3 > 0 then + local s = string.format('=?UTF-8?B?%s?= =?UTF-8?B?%s?= =?UTF-8?B?%s?=', + s1, s2, s3) + local res = ffi.C.rspamd_mime_header_decode(pool, s, #s) + res = ffi.string(res) + assert_not_nil(res, "cannot decode " .. s) + assert_equal(res, str, res .. " not equal " .. str .. " on " .. tostring(i) .. " iteration") + end end ffi.C.rspamd_mempool_delete(pool)