X-Git-Url: http://git.madism.org/?a=blobdiff_plain;ds=sidebyside;f=pattern.c;h=63abd4e605927bae11dd8b81560d0bfb277f2740;hb=da68385c8a5ae014ac1ea0f06302850b712e7906;hp=53cce8204ca5d224f938af2702f7968ce3346198;hpb=169f101dc43f0581d8c52bcf8131d9eecb7cdeb0;p=apps%2Fmadmutt.git diff --git a/pattern.c b/pattern.c index 53cce82..63abd4e 100644 --- a/pattern.c +++ b/pattern.c @@ -218,7 +218,7 @@ msg_search (CONTEXT *ctx, pattern_t* pat, int msgno) if (pat->op == M_HEADER) { if (*(buf = mutt_read_rfc822_line (fp, buf, &blen)) == '\0') break; - } if (fgets (buf, blen - 1, fp) == NULL) + } else if (fgets (buf, blen - 1, fp) == NULL) break; /* don't loop forever */ if (patmatch (pat, buf) == 0) { match = 1; @@ -246,12 +246,18 @@ int eat_regexp (pattern_t * pat, BUFFER * s, BUFFER * err) int r; memset (&buf, 0, sizeof (buf)); + if (mutt_extract_token (&buf, s, M_TOKEN_PATTERN | M_TOKEN_COMMENT) != 0 || !buf.data) { snprintf (err->data, err->dsize, _("Error in expression: %s"), s->dptr); return (-1); } + if (!*buf.data) { + snprintf (err->data, err->dsize, _("Empty expression")); + return (-1); + } + #if 0 /* If there are no RE metacharacters, use simple search anyway */ if (!pat->stringmatch && !strpbrk (buf.data, "|[{.*+?^$")) @@ -698,7 +704,6 @@ pattern_t *mutt_pattern_comp ( /* const */ char *s, int flags, BUFFER * err) pattern_t *last = NULL; int not = 0; int alladdr = 0; - int stringmatch = 0; int or = 0; int implicit = 1; /* used to detect logical AND operator */ struct pattern_flags *entry; @@ -744,10 +749,8 @@ pattern_t *mutt_pattern_comp ( /* const */ char *s, int flags, BUFFER * err) implicit = 0; not = 0; alladdr = 0; - stringmatch = 0; break; case '=': - stringmatch = 1; /* fallthrough */ case '~': if (implicit && or) { @@ -763,10 +766,9 @@ pattern_t *mutt_pattern_comp ( /* const */ char *s, int flags, BUFFER * err) tmp = new_pattern (); tmp->not = not; tmp->alladdr = alladdr; - tmp->stringmatch = stringmatch; + tmp->stringmatch = (*ps.dptr == '=') ? 1 : 0; not = 0; alladdr = 0; - stringmatch = 0; if (last) last->next = tmp; @@ -999,7 +1001,7 @@ mutt_pattern_exec (struct pattern_t *pat, pattern_exec_flag flags, case M_WHOLE_MSG: #ifdef USE_IMAP /* IMAP search sets h->matched at search compile time */ - if (Context->magic == M_IMAP && pat->stringmatch) + if (ctx->magic == M_IMAP && pat->stringmatch) return (h->matched); #endif return (pat->not ^ msg_search (ctx, pat, h->msgno));