local-part = dot-atom / quoted-string / obs-local-part
obs-local-part = word *("." word)
*/
- i_assert(ctx->parser.data != ctx->parser.end);
+ i_assert(ctx->parser.data < ctx->parser.end);
str_truncate(ctx->str, 0);
if (*ctx->parser.data == '"')
/* obs-domain-list = "@" domain *(*(CFWS / "," ) [CFWS] "@" domain) */
str_truncate(ctx->str, 0);
for (;;) {
- if (ctx->parser.data == ctx->parser.end)
+ if (ctx->parser.data >= ctx->parser.end)
return 0;
if (*ctx->parser.data != '@')
if (parse_domain_list(ctx) <= 0 || *ctx->parser.data != ':') {
if (ctx->fill_missing)
ctx->addr.route = "INVALID_ROUTE";
- if (ctx->parser.data == ctx->parser.end)
+ if (ctx->parser.data >= ctx->parser.end)
return -1;
/* try to continue anyway */
} else {
ctx->addr.domain = "SYNTAX_ERROR";
ctx->addr.invalid_syntax = TRUE;
}
- return ctx->parser.data != ctx->parser.end;
+ return ctx->parser.data < ctx->parser.end ? 1 : 0;
}
static int parse_addr_spec(struct message_address_parser_context *ctx)
/* addr-spec = local-part "@" domain */
int ret, ret2 = -2;
- i_assert(ctx->parser.data != ctx->parser.end);
+ i_assert(ctx->parser.data < ctx->parser.end);
str_truncate(ctx->parser.last_comment, 0);
/* end of input or parsing local-part failed */
ctx->addr.invalid_syntax = TRUE;
}
- if (ret != 0 && ctx->parser.data != ctx->parser.end &&
+ if (ret != 0 && ctx->parser.data < ctx->parser.end &&
*ctx->parser.data == '@') {
ret2 = parse_domain(ctx);
if (ret2 <= 0)
if (parse_mailbox(ctx) <= 0) {
/* broken mailbox - try to continue anyway. */
}
- if (ctx->parser.data == ctx->parser.end ||
+ if (ctx->parser.data >= ctx->parser.end ||
*ctx->parser.data != ',')
break;
ctx->parser.data++;
}
}
if (ret >= 0) {
- if (ctx->parser.data == ctx->parser.end ||
+ if (ctx->parser.data >= ctx->parser.end ||
*ctx->parser.data != ';')
ret = -1;
else {
max_addresses--;
if ((ret = parse_address(ctx)) == 0)
break;
- if (ctx->parser.data == ctx->parser.end ||
+ if (ctx->parser.data >= ctx->parser.end ||
*ctx->parser.data != ',') {
ret = -1;
break;
str_truncate(ctx->last_comment, 0);
start = ++ctx->data;
- for (; ctx->data != ctx->end; ctx->data++) {
+ for (; ctx->data < ctx->end; ctx->data++) {
switch (*ctx->data) {
case '(':
level++;
ctx->data - start);
}
ctx->data++;
- return ctx->data != ctx->end;
+ return ctx->data < ctx->end ? 1 : 0;
}
break;
case '\\':
start = ctx->data + 1;
ctx->data++;
- if (ctx->data == ctx->end)
+ if (ctx->data >= ctx->end)
return -1;
break;
}
int rfc822_skip_lwsp(struct rfc822_parser_context *ctx)
{
- for (; ctx->data != ctx->end;) {
+ for (; ctx->data < ctx->end;) {
if (*ctx->data == ' ' || *ctx->data == '\t' ||
*ctx->data == '\r' || *ctx->data == '\n') {
ctx->data++;
if (rfc822_skip_comment(ctx) < 0)
return -1;
}
- return ctx->data != ctx->end;
+ return ctx->data < ctx->end ? 1 : 0;
}
int rfc822_parse_atom(struct rfc822_parser_context *ctx, string_t *str)
atext =
; Any character except controls, SP, and specials.
*/
- if (ctx->data == ctx->end || !IS_ATEXT(*ctx->data))
+ if (ctx->data >= ctx->end || !IS_ATEXT(*ctx->data))
return -1;
- for (start = ctx->data++; ctx->data != ctx->end; ctx->data++) {
+ for (start = ctx->data++; ctx->data < ctx->end; ctx->data++) {
if (IS_ATEXT(*ctx->data))
continue;
For RFC-822 compatibility allow LWSP around '.'
*/
- if (ctx->data == ctx->end || !IS_ATEXT(*ctx->data))
+ if (ctx->data >= ctx->end || !IS_ATEXT(*ctx->data))
return -1;
- for (start = ctx->data++; ctx->data != ctx->end; ) {
+ for (start = ctx->data++; ctx->data < ctx->end; ) {
if (IS_ATEXT(*ctx->data)) {
ctx->data++;
continue;
{
const unsigned char *start;
- for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {
+ for (start = ctx->data; ctx->data < ctx->end; ctx->data++) {
if (IS_ATEXT_NON_TSPECIAL(*ctx->data) || *ctx->data == '.')
continue;
i_assert(*ctx->data == '"');
ctx->data++;
- for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {
+ for (start = ctx->data; ctx->data < ctx->end; ctx->data++) {
switch (*ctx->data) {
case '"':
str_append_n(str, start, ctx->data - start);
break;
case '\\':
ctx->data++;
- if (ctx->data == ctx->end)
+ if (ctx->data >= ctx->end)
return -1;
str_append_n(str, start, ctx->data - start - 1);
The difference between this function and rfc822_parse_dot_atom()
is that this doesn't just silently skip over all the whitespace.
*/
- for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {
+ for (start = ctx->data; ctx->data < ctx->end; ctx->data++) {
if (IS_ATEXT(*ctx->data) || *ctx->data == '.')
continue;
obs-phrase = word *(word / "." / CFWS)
*/
- if (ctx->data == ctx->end)
+ if (ctx->data >= ctx->end)
return 0;
if (*ctx->data == '.')
return -1;
i_assert(ctx->data < ctx->end);
i_assert(*ctx->data == '[');
- for (start = ctx->data; ctx->data != ctx->end; ctx->data++) {
+ for (start = ctx->data; ctx->data < ctx->end; ctx->data++) {
if (*ctx->data == '\\') {
ctx->data++;
- if (ctx->data == ctx->end)
+ if (ctx->data >= ctx->end)
break;
} else if (*ctx->data == ']') {
ctx->data++;
*key_r = NULL;
*value_r = NULL;
- if (ctx->data == ctx->end)
+ if (ctx->data >= ctx->end)
return 0;
if (*ctx->data != ';')
return -1;
/* broken / no value */
} else if (*ctx->data == '"') {
ret = rfc822_parse_quoted_string(ctx, tmp);
- } else if (ctx->data != ctx->end && *ctx->data == '=') {
+ } else if (ctx->data < ctx->end && *ctx->data == '=') {
/* workaround for broken input:
name==?utf-8?b?...?= */
- while (ctx->data != ctx->end && *ctx->data != ';' &&
+ while (ctx->data < ctx->end && *ctx->data != ';' &&
*ctx->data != ' ' && *ctx->data != '\t' &&
*ctx->data != '\r' && *ctx->data != '\n') {
str_append_c(tmp, *ctx->data);