static bool input_idx_need_encoding(const unsigned char *input, unsigned int i)
{
+ /* 8bit chars */
if ((input[i] & 0x80) != 0)
return TRUE;
+ /* control chars */
+ if (input[i] < 32)
+ return TRUE;
+ /* <LWSP>=? */
if (input[i] == '=' && input[i+1] == '?' &&
(i == 0 || IS_LWSP(input[i-1])))
return TRUE;
case '?':
case '_':
line_len_left -= 2;
- str_printfa(output, "=%2X", input[i]);
+ str_printfa(output, "=%02X", input[i]);
break;
default:
if (input[i] < 32 || (input[i] & 0x80) != 0) {
line_len_left -= 2;
- str_printfa(output, "=%2X", input[i]);
+ str_printfa(output, "=%02X", input[i]);
} else {
str_append_c(output, input[i]);
}
"a ää ä b", "a =?utf-8?b?w6TDpCDDpA==?= b",
"ä a ä", "=?utf-8?q?=C3=A4_a_=C3=A4?=",
"ää a ä", "=?utf-8?b?w6TDpCBhIMOk?=",
+ "foo\001bar", "=?utf-8?q?foo=01bar?=",
+ "\x01\x02\x03\x04\x05\x06\x07\x08", "=?utf-8?b?AQIDBAUGBwg=?="
};
string_t *str = t_str_new(128);
unsigned int i;