;
if (q[0] != '?' || !strchr ("BbQq", q[1]) || q[2] != '?')
continue;
- for (q = q + 3; 0x20 < *q && *q < 0x7f && *q != '?'; q++)
+ /* non-strict check since many MUAs will not encode spaces and question marks */
+ for (q = q + 3; 0x20 <= *q && *q < 0x7f && (*q != '?' || q[1] != '='); q++)
;
if (q[0] != '?' || q[1] != '=')
{
}
if (rfc2047_decode_word (d, p, dlen) < 0)
- strcpy(d, p);
+ {
+ n = q - p;
+ if (n > dlen)
+ n = dlen;
+ memcpy (d, p, n);
+ }
found_encoded = 1;
s = q;
n = strlen (d);
*pos = 0;
}
+void
+add_snippet_raw(char **ppos, char *term, char *add)
+{
+ char *pos = *ppos;
+ while (pos < term && *add)
+ *pos++ = *add++;
+ *ppos = pos;
+ *pos = 0;
+}
+
void
add_subject_snippet(char **ppos, char *term, char *add)
{
add_subject_snippet(ppos, term, add);
return;
}
- // debug("%s: pers=%s mbox=%s\n", add, addr->personal, addr->mailbox);
rfc2047_decode(&addr->personal);
+ // debug("%s: pers=%s mbox=%s\n", add, addr->personal, addr->mailbox);
if (!addr->mailbox || !addr->mailbox[0])
add_mbox = 0;
if (!addr->personal || !addr->personal[0])
if (add_personal)
add_snippet(ppos, term, addr->personal);
if (add_mbox && add_personal)
- add_snippet(ppos, term, " <");
+ add_snippet_raw(ppos, term, " <");
if (add_mbox)
add_snippet(ppos, term, addr->mailbox);
if (add_mbox && add_personal)
- add_snippet(ppos, term, ">");
+ add_snippet_raw(ppos, term, ">");
}
else
- add_snippet(ppos, term, "???");
+ add_snippet_raw(ppos, term, "???");
rfc822_free_address(&addr);
}