From: Vsevolod Stakhov Date: Tue, 20 Dec 2016 16:46:28 +0000 (+0000) Subject: [Minor] Add function to perform quoted-printable encoding X-Git-Tag: 1.5.0~534 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8add4deb4fe88fe04b4469601bbe477c96cefdf3;p=thirdparty%2Frspamd.git [Minor] Add function to perform quoted-printable encoding --- diff --git a/src/libutil/str_util.c b/src/libutil/str_util.c index bccb0699fb..7a94a4df1e 100644 --- a/src/libutil/str_util.c +++ b/src/libutil/str_util.c @@ -1940,6 +1940,43 @@ decode: return (o - out); } +gssize +rspamd_encode_qp2047_buf (const gchar *in, gsize inlen, + gchar *out, gsize outlen) +{ + gchar *o = out, *end = out + outlen, c; + static const gchar hexdigests[16] = "0123456789ABCDEF"; + + while (inlen > 0 && o < end) { + c = *in; + + if (g_ascii_isalnum (c)) { + *o++ = c; + } + else if (c == ' ') { + *o++ = "_"; + in++; + } + else if (end - o >= 3){ + *o++ = '='; + *o++ = hexdigests[((c >> 4) & 0xF)]; + *o++ = hexdigests[(c & 0xF)]; + } + else { + return (-1); + } + + in ++; + inlen --; + } + + if (inlen != 0) { + return (-1); + } + + return (o - out); +} + /* * GString ucl emitting functions diff --git a/src/libutil/str_util.h b/src/libutil/str_util.h index 2c9905e139..094a6498c6 100644 --- a/src/libutil/str_util.h +++ b/src/libutil/str_util.h @@ -234,6 +234,17 @@ gssize rspamd_decode_qp_buf (const gchar *in, gsize inlen, gssize rspamd_decode_qp2047_buf (const gchar *in, gsize inlen, gchar *out, gsize outlen); +/** + * Encode quoted-printable buffer using rfc2047 format, input and output must not overlap + * @param in + * @param inlen + * @param out + * @param outlen + * @return + */ +gssize rspamd_encode_qp2047_buf (const gchar *in, gsize inlen, + gchar *out, gsize outlen); + #ifndef g_tolower # define g_tolower(x) (((x) >= 'A' && (x) <= 'Z') ? (x) - 'A' + 'a' : (x)) #endif