if (ctx->data >= ctx->end)
return -1;
- if (*ctx->data == '\r' || *ctx->data == '\n') {
- /* quoted-pair doesn't allow CR/LF.
+ if (*ctx->data == '\r' || *ctx->data == '\n' ||
+ *ctx->data == '\0') {
+ /* quoted-pair doesn't allow CR/LF/NUL.
They are part of the obs-qp though, so don't
return them as error. */
ctx->data--;
if (ctx->data >= ctx->end)
return -1;
- if (*ctx->data == '\r' || *ctx->data == '\n') {
- /* quoted-pair doesn't allow CR/LF.
+ if (*ctx->data == '\r' || *ctx->data == '\n' ||
+ *ctx->data == '\0') {
+ /* quoted-pair doesn't allow CR/LF/NUL.
They are part of the obs-qp though, so don't
return them as error. */
str_append_data(str, start, ctx->data - start);
static void test_message_address_nuls(void)
{
const unsigned char input[] =
- "\"user\0nuls\"@[domain\0nuls] (comment\0nuls)";
+ "\"user\0nuls\\\0-esc\"@[domain\0nuls\\\0-esc] (comment\0nuls\\\0-esc)";
const struct message_address output = {
- NULL, "comment\xEF\xBF\xBDnuls", NULL, "user\xEF\xBF\xBDnuls",
- "[domain\xEF\xBF\xBDnuls]", FALSE
+ NULL, "comment\xEF\xBF\xBDnuls\\\xEF\xBF\xBD-esc", NULL,
+ "user\xEF\xBF\xBDnuls\\\xEF\xBF\xBD-esc",
+ "[domain\xEF\xBF\xBDnuls\\\xEF\xBF\xBD-esc]", FALSE
};
const struct message_address *addr;
static void test_message_address_nuls_display_name(void)
{
const unsigned char input[] =
- "\"displayname\0nuls\" <\"user\0nuls\"@[domain\0nuls]>";
+ "\"displayname\0nuls\\\0-esc\" <\"user\0nuls\\\0-esc\"@[domain\0nuls\\\0-esc]>";
const struct message_address output = {
- NULL, "displayname\xEF\xBF\xBDnuls", NULL, "user\xEF\xBF\xBDnuls",
- "[domain\xEF\xBF\xBDnuls]", FALSE
+ NULL, "displayname\xEF\xBF\xBDnuls\\\xEF\xBF\xBD-esc", NULL,
+ "user\xEF\xBF\xBDnuls\\\xEF\xBF\xBD-esc",
+ "[domain\xEF\xBF\xBDnuls\\\xEF\xBF\xBD-esc]", FALSE
};
const struct message_address *addr;