X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=libcitadel%2Flib%2Fmime_parser.c;h=76452935a6280cd6ef92e5b27d3e1d8a3f28d4b9;hb=87bcd6a282357e425e0832177b1452e29baab3ec;hp=026d0555009cd76d66865dd327b484274091f6c5;hpb=306d61522a4decb33c761969a3bd0df9ed696d14;p=citadel.git diff --git a/libcitadel/lib/mime_parser.c b/libcitadel/lib/mime_parser.c index 026d05550..76452935a 100644 --- a/libcitadel/lib/mime_parser.c +++ b/libcitadel/lib/mime_parser.c @@ -71,6 +71,26 @@ char *fixed_partnum(char *supplied_partnum) { } +inline unsigned int decode_hex(char *Source) +{ + int ret = 0; + if (*Source < 'A') { + ret += (*Source - '0'); + } + else { + ret += (*Source - 'A' + 10); + } + ret = ret << 4; + if (*(Source + 1) < 'A') { + ret += (*(Source + 1) - '0'); + } + else { + ret += (*(Source + 1) - 'A' + 10); + } + if (ret > 255) + return 0; + return ret; +} /* * Convert "quoted-printable" to binary. Returns number of bytes decoded. @@ -94,7 +114,7 @@ int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen) { else if (encoded[pos] == '=') { ch = 0; - sscanf(&encoded[pos+1], "%02x", &ch); + ch = decode_hex(&encoded[pos+1]); pos += 3; decoded[decoded_length++] = ch; }