Browse Source

[Minor] Add function to perform quoted-printable encoding

tags/1.5.0
Vsevolod Stakhov 7 years ago
parent
commit
8add4deb4f
2 changed files with 48 additions and 0 deletions
  1. 37
    0
      src/libutil/str_util.c
  2. 11
    0
      src/libutil/str_util.h

+ 37
- 0
src/libutil/str_util.c View File

@@ -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

+ 11
- 0
src/libutil/str_util.h View File

@@ -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

Loading…
Cancel
Save