projects
/
apps
/
madmutt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix a segfault introduced by some nasty const /o\
[apps/madmutt.git]
/
rfc3676.c
diff --git
a/rfc3676.c
b/rfc3676.c
index
805ff71
..
f6ca099
100644
(file)
--- a/
rfc3676.c
+++ b/
rfc3676.c
@@
-68,7
+68,7
@@
static void print_flowed_line (char *line, STATE * s, int ql) {
}
if (str_len (line) == 0) {
}
if (str_len (line) == 0) {
- if (option (OPTQUOTEEMPTY)) {
+ if (
!(s->flags & M_REPLYING) ||
option (OPTQUOTEEMPTY)) {
if (s->prefix)
state_puts(s->prefix,s);
for (i=0;i<ql;++i) state_putc('>',s);
if (s->prefix)
state_puts(s->prefix,s);
for (i=0;i<ql;++i) state_putc('>',s);
@@
-136,13
+136,15
@@
static void print_flowed_line (char *line, STATE * s, int ql) {
int rfc3676_handler (BODY * a, STATE * s) {
int bytes = a->length;
char buf[LONG_STRING];
int rfc3676_handler (BODY * a, STATE * s) {
int bytes = a->length;
char buf[LONG_STRING];
- char *curline =
str_dup (""
);
+ char *curline =
mem_malloc(1
);
char *t = NULL;
unsigned int curline_len = 1,
quotelevel = 0, newql = 0;
int buf_off, buf_len;
int delsp = 0, fixed = 0;
char *t = NULL;
unsigned int curline_len = 1,
quotelevel = 0, newql = 0;
int buf_off, buf_len;
int delsp = 0, fixed = 0;
+ *curline='\0';
+
/* respect DelSP of RfC3676 only with f=f parts */
if ((t = (char*) mutt_get_parameter ("delsp", a->parameter))) {
delsp = str_len (t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0;
/* respect DelSP of RfC3676 only with f=f parts */
if ((t = (char*) mutt_get_parameter ("delsp", a->parameter))) {
delsp = str_len (t) == 3 && ascii_strncasecmp (t, "yes", 3) == 0;
@@
-173,7
+175,7
@@
int rfc3676_handler (BODY * a, STATE * s) {
* possibly a change in quoting level. But that's better than not
* displaying it at all.
*/
* possibly a change in quoting level. But that's better than not
* displaying it at all.
*/
- if ((t = strrchr (buf, '\
n')) || (t = strrchr (buf, '\r
'))) {
+ if ((t = strrchr (buf, '\
r')) || (t = strrchr (buf, '\n
'))) {
*t = '\0';
buf_len = t - buf;
}
*t = '\0';
buf_len = t - buf;
}
@@
-192,6
+194,15
@@
int rfc3676_handler (BODY * a, STATE * s) {
if (delsp && buf_len >= 1 && buf[buf_len-1] == ' ')
buf[--buf_len] = '\0';
if (delsp && buf_len >= 1 && buf[buf_len-1] == ' ')
buf[--buf_len] = '\0';
+ /* we're here when last space removed 'cause of DelSp was
+ * the last space and there isn't more -> done */
+ if ((buf_len - buf_off) < 0) {
+ print_flowed_line (curline, s, quotelevel);
+ *curline = '\0';
+ curline_len = 1;
+ continue;
+ }
+
/* signature separator also flushes the previous paragraph */
if (strcmp(buf + buf_off, "-- ") == 0 && curline && *curline) {
print_flowed_line (curline, s, quotelevel);
/* signature separator also flushes the previous paragraph */
if (strcmp(buf + buf_off, "-- ") == 0 && curline && *curline) {
print_flowed_line (curline, s, quotelevel);
@@
-256,7
+267,8
@@
void rfc3676_space_stuff (HEADER* hdr) {
fputs (buf, out);
}
fclose (in);
fputs (buf, out);
}
fclose (in);
- unlink (hdr->content->filename);
fclose (out);
fclose (out);
+ mutt_set_mtime (hdr->content->filename, tmpfile);
+ unlink (hdr->content->filename);
str_replace (&hdr->content->filename, tmpfile);
}
str_replace (&hdr->content->filename, tmpfile);
}