diff --git a/mailx-12.5-mime.dif b/mailx-12.5-mime.dif index cdb17fc..cfcebd1 100644 --- a/mailx-12.5-mime.dif +++ b/mailx-12.5-mime.dif @@ -12,7 +12,7 @@ enum tdflags { --- mime.c -+++ mime.c 2012-03-30 14:50:10.318065066 +0000 ++++ mime.c 2013-07-02 10:25:35.000000000 +0000 @@ -302,13 +302,78 @@ gettcharset(void) return t; } @@ -101,7 +101,7 @@ if (w & GIDENT) { if (hp->h_from && name_highbit(hp->h_from)) goto needs; -@@ -355,7 +421,7 @@ need_hdrconv(struct header *hp, enum gfi +@@ -355,7 +422,7 @@ need_hdrconv(struct header *hp, enum gfi if (w & GSUBJECT && has_highbit(hp->h_subject)) goto needs; return NULL; @@ -128,7 +128,7 @@ match = 1; break; } -@@ -748,11 +814,54 @@ mime_isclean(FILE *f) +@@ -748,16 +814,66 @@ mime_isclean(FILE *f) maxlen = curlen; curlen = 1; } else if (c & 0200) { @@ -172,19 +172,31 @@ + continue; + } + latin: -+ if (text_chars[i & 0377] == I) ++ if (text_chars[i & 0377] == I) { + isclean |= MIME_LATIN; -+ if (text_chars[i & 0377] == X) ++ continue; ++ } ++ if (text_chars[i & 0377] == X) { + isclean |= MIME_CTRLCHAR; ++ break; ++ } } else if (c == '\0') { isclean |= MIME_HASNUL; break; - } else if ((c < 040 && (c != '\t' && c != '\f')) || c == 0177) { + } else if (text_chars[c & 0377] == F) { isclean |= MIME_CTRLCHAR; ++ break; } } while (c != EOF); -@@ -826,11 +935,16 @@ get_mime_convert(FILE *fp, char **conten + if (lastc != '\n') + isclean |= MIME_NOTERMNL; ++ if (isclean & (MIME_CTRLCHAR|MIME_HASNUL)) ++ isclean &= (MIME_CTRLCHAR|MIME_HASNUL); + clearerr(f); + fseek(f, initial_pos, SEEK_SET); + if ((cp = value("maximum-unencoded-line-length")) != NULL) +@@ -826,11 +942,16 @@ get_mime_convert(FILE *fp, char **conten * ^I or ^L in text/plain bodies. However, some * obscure character sets actually contain these * characters, so the content type can be set. @@ -201,7 +213,7 @@ } return convert; } -@@ -989,8 +1103,14 @@ mime_fromhdr(struct str *in, struct str +@@ -989,8 +1110,14 @@ mime_fromhdr(struct str *in, struct str #ifdef HAVE_ICONV iconv_t fhicd = (iconv_t)-1; #endif @@ -216,7 +228,7 @@ maxstor = in->l; out->s = smalloc(maxstor + 1); out->l = 0; -@@ -1010,7 +1130,7 @@ mime_fromhdr(struct str *in, struct str +@@ -1010,7 +1137,7 @@ mime_fromhdr(struct str *in, struct str #ifdef HAVE_ICONV if (fhicd != (iconv_t)-1) iconv_close(fhicd); @@ -225,7 +237,7 @@ fhicd = iconv_open_ft(tcs, cs); else fhicd = (iconv_t)-1; -@@ -1105,12 +1225,17 @@ notmime: +@@ -1105,12 +1232,17 @@ notmime: } fromhdr_end: *q = '\0'; diff --git a/mailx-12.5-parentheses.dif b/mailx-12.5-parentheses.dif new file mode 100644 index 0000000..8509400 --- /dev/null +++ b/mailx-12.5-parentheses.dif @@ -0,0 +1,410 @@ +--- cmd1.c ++++ cmd1.c 2013-07-02 10:44:54.178300341 +0000 +@@ -112,14 +112,14 @@ headers(void *v) + lastg = g; + lastmq = mq; + } +- if (n>0 && mp==&message[n-1] || +- n==0 && g==k || +- n==-2 && g==k+size && lastmq || +- n<0 && g>=k && mp->m_flag&fl) ++ if ((n>0 && mp==&message[n-1]) || ++ (n==0 && g==k) || ++ (n==-2 && g==k+size && lastmq) || ++ (n<0 && g>=k && mp->m_flag&fl)) + break; + g++; + } +- if (lastmq && (n==-2 || n==-1 && mp==&message[msgCount])) { ++ if (lastmq && ((n==-2 || n==-1) && mp==&message[msgCount])) { + g = lastg; + mq = lastmq; + } +@@ -155,14 +155,14 @@ headers(void *v) + lastg = g; + lastmq = mq; + } +- if (n>0 && mp==&message[n-1] || +- n==0 && g==k || +- n==-2 && g==k+size && lastmq || +- n<0 && g>=k && mp->m_flag&fl) ++ if ((n>0 && mp==&message[n-1]) || ++ (n==0 && g==k) || ++ (n==-2 && g==k+size && lastmq) || ++ (n<0 && g>=k && mp->m_flag&fl)) + break; + g++; + } +- if (lastmq && (n==-2 || n==-1 && mp==&message[msgCount])) { ++ if (lastmq && ((n==-2 || n==-1) && mp==&message[msgCount])) { + g = lastg; + mq = lastmq; + } +--- collect.c ++++ collect.c 2013-07-02 10:56:15.602310172 +0000 +@@ -279,8 +279,8 @@ read_attachment_data(struct attachment * + perror(ap->a_name); + } + if (ap->a_name && (value("attachment-ask-charset") || +- (cp = value("sendcharsets")) != NULL && +- strchr(cp, ',') != NULL)) { ++ ((cp = value("sendcharsets")) != NULL && ++ strchr(cp, ',') != NULL))) { + snprintf(prefix, sizeof prefix, "#%u\tcharset: ", number); + ap->a_charset = readtty(prefix, ap->a_charset); + } +@@ -648,8 +648,8 @@ cont: + value("interactive") != NULL && + (value("dot") != NULL || value("ignoreeof") != NULL)) + break; +- if (linebuf[0] != escape || (value("interactive") == NULL && +- tildeflag == 0 || ++ if (linebuf[0] != escape || ((value("interactive") == NULL && ++ tildeflag == 0) || + tildeflag < 0)) { + if (putline(collf, linebuf, count) < 0) + goto err; +--- def.h ++++ def.h 2013-07-02 10:36:04.091168058 +0000 +@@ -408,7 +408,7 @@ enum gfield { + #define GMASK (GTO|GSUBJECT|GCC|GBCC|GREPLYTO) /* Mask of places from whence */ + + #define visible(mp) (((mp)->m_flag&(MDELETED|MHIDDEN|MKILL))==0|| \ +- dot==(mp) && (mp)->m_flag&MKILL) ++ (dot==(mp) && (mp)->m_flag&MKILL)) + + /* + * Structure used to pass about the current +--- fio.c ++++ fio.c 2013-07-02 10:59:31.683460415 +0000 +@@ -600,8 +600,8 @@ getfold(char *name, int size) + + if ((folder = value("folder")) == NULL) + return (-1); +- if (*folder == '/' || (p = which_protocol(folder)) != PROTO_FILE && +- p != PROTO_MAILDIR) { ++ if (*folder == '/' || ((p = which_protocol(folder)) != PROTO_FILE && ++ p != PROTO_MAILDIR)) { + strncpy(name, folder, size); + name[size-1]='\0'; + } else { +--- imap.c ++++ imap.c 2013-07-02 09:26:20.434847340 +0000 +@@ -1868,11 +1868,11 @@ imap_update(struct mailbox *mp) + stored++; + gotcha++; + } else if (mp->mb_type != MB_CACHE || +- !edit && (!(m->m_flag&(MBOXED|MSAVED|MDELETED)) ++ (!edit && (!(m->m_flag&(MBOXED|MSAVED|MDELETED)) + || (m->m_flag & + (MBOXED|MPRESERVE|MTOUCH)) == +- (MPRESERVE|MTOUCH)) || +- edit && !(m->m_flag & MDELETED)) ++ (MPRESERVE|MTOUCH))) || ++ (edit && !(m->m_flag & MDELETED))) + held++; + if (m->m_flag & MNEW) { + m->m_flag &= ~MNEW; +@@ -2779,7 +2779,7 @@ imap_appenduid(struct mailbox *mp, FILE + xmb.mb_otf = xmb.mb_itf = fp; + initcache(&xmb); + memset(&xm, 0, sizeof xm); +- xm.m_flag = flag&MREAD | MNEW; ++ xm.m_flag = flag&(MREAD|MNEW); + xm.m_time = t; + xm.m_block = mailx_blockof(off1); + xm.m_offset = mailx_offsetof(off1); +--- junk.c ++++ junk.c 2013-07-02 09:36:11.306215424 +0000 +@@ -345,11 +345,11 @@ putdb(void) + void *zp; + int scomp, ncomp; + +- if (!super_mmapped && (sfp = dbfp(SUPER, O_WRONLY, &scomp, &sname)) +- == NULL || sfp == (FILE *)-1) ++ if (!super_mmapped && ((sfp = dbfp(SUPER, O_WRONLY, &scomp, &sname)) ++ == NULL || sfp == (FILE *)-1)) + return; +- if (!nodes_mmapped && (nfp = dbfp(NODES, O_WRONLY, &ncomp, &nname)) +- == NULL || nfp == (FILE *)-1) ++ if (!nodes_mmapped && ((nfp = dbfp(NODES, O_WRONLY, &ncomp, &nname)) ++ == NULL || nfp == (FILE *)-1)) + return; + if (super_mmapped == 0 || nodes_mmapped == 0) + holdint(); +@@ -696,8 +696,8 @@ loop: *stop = 0; + } + SAVE(c) + } else if (constituent(c, *buf, i+j, sp->price, sp->hadamp) || +- sp->loc == HEADER && c == '.' && +- asccasecmp(sp->field, "subject*")) { ++ (sp->loc == HEADER && c == '.' && ++ asccasecmp(sp->field, "subject*"))) { + if (c == '&') + sp->hadamp = 1; + SAVE(c) +@@ -775,9 +775,9 @@ out: if (i > 0) { + ascncasecmp(sp->field, "x-spam", 6) == 0 || + ascncasecmp(sp->field, "x-pstn", 6) == 0 || + ascncasecmp(sp->field, "x-scanned", 9) == 0 || +- asccasecmp(sp->field, "received*") == 0 && ++ (asccasecmp(sp->field, "received*") == 0 && + ((2*c > i) || i < 4 || +- asccasestr(*buf, "localhost") != NULL))) ++ asccasestr(*buf, "localhost") != NULL)))) + goto loop; + return *buf; + } +@@ -816,14 +816,14 @@ add(const char *word, enum entry entry, + switch (entry) { + case GOOD: + c = get(&n[OF_node_good]); +- if (incr>0 && c=-incr) { ++ if ((incr>0 && c=-incr)) { + c += incr; + put(&n[OF_node_good], c); + } + break; + case BAD: + c = get(&n[OF_node_bad]); +- if (incr>0 && c=-incr) { ++ if ((incr>0 && c=-incr)) { + c += incr; + put(&n[OF_node_bad], c); + } +@@ -958,7 +958,7 @@ insert(int *msgvec, enum entry entry, in + break; + } + u += incr; +- if (entry == GOOD && incr > 0 || entry == BAD && incr < 0) ++ if ((entry == GOOD && incr > 0) || (entry == BAD && incr < 0)) + message[*ip-1].m_flag &= ~MJUNK; + else + message[*ip-1].m_flag |= MJUNK; +@@ -1109,10 +1109,10 @@ rate(const char *word, enum entry entry, + * gives the most interesting verbose output. + */ + if (d > best[i].dist || +- d == best[i].dist && +- p < best[i].prob || +- best[i].loc == HEADER && +- d == best[i].dist) { ++ (d == best[i].dist && ++ p < best[i].prob) || ++ (best[i].loc == HEADER && ++ d == best[i].dist)) { + for (j = BEST-2; j >= i; j--) + best[j+1] = best[j]; + best[i].dist = d; +--- macro.c ++++ macro.c 2013-07-02 10:57:57.718909269 +0000 +@@ -195,7 +195,7 @@ ccall(void *v) + char **args = v; + struct macro *mp; + +- if (args[0] == NULL || args[1] != NULL && args[2] != NULL) { ++ if (args[0] == NULL || (args[1] != NULL && args[2] != NULL)) { + fprintf(stderr, "Syntax is: call \n"); + return 1; + } +--- md5.c ++++ md5.c 2013-07-02 11:17:37.825823499 +0000 +@@ -70,42 +70,42 @@ static unsigned char PADDING[64] = { + /* + * F, G, H and I are basic MD5 functions. + */ +-#define F(x, y, z) ((x) & (y) | ~(x) & (z)) +-#define G(x, y, z) ((x) & (z) | (y) & ~(z)) ++#define F(x, y, z) (((x) & (y)) | (~(x) & (z))) ++#define G(x, y, z) (((x) & (z)) | ((y) & ~(z))) + #define H(x, y, z) ((x) ^ (y) ^ (z)) +-#define I(x, y, z) ((y) ^ ((x) | ~(z)&0xffffffff)) ++#define I(x, y, z) ((y) ^ ((x) | (~(z)&0xffffffff))) + + /* + * ROTATE_LEFT rotates x left n bits. + */ +-#define ROTATE_LEFT(x, n) ((x)<<(n) & 0xffffffff | (x) >> 32-(n)) ++#define ROTATE_LEFT(x, n) ((((x)<<(n)) & 0xffffffff) | ((x) >> (32-(n)))) + + /* + * FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. + * Rotation is separate from addition to prevent recomputation. + */ + #define FF(a, b, c, d, x, s, ac) { \ +- (a) = (a) + F((b), (c), (d)) + (x) + ((ac)&0xffffffff) & 0xffffffff; \ ++ (a) = (a) + F((b), (c), (d)) + ((x) + ((ac)&0xffffffff) & 0xffffffff); \ + (a) = ROTATE_LEFT((a), (s)); \ +- (a) = (a) + (b) & 0xffffffff; \ ++ (a) = (a) + ((b) & 0xffffffff); \ + } + + #define GG(a, b, c, d, x, s, ac) { \ +- (a) = (a) + G((b), (c), (d)) + (x) + ((ac)&0xffffffff) & 0xffffffff; \ ++ (a) = (a) + G((b), (c), (d)) + ((x) + ((ac)&0xffffffff) & 0xffffffff); \ + (a) = ROTATE_LEFT((a), (s)); \ +- (a) = (a) + (b) & 0xffffffff; \ ++ (a) = (a) + ((b) & 0xffffffff); \ + } + + #define HH(a, b, c, d, x, s, ac) { \ +- (a) = (a) + H((b), (c), (d)) + (x) + ((ac)&0xffffffff) & 0xffffffff; \ ++ (a) = (a) + H((b), (c), (d)) + ((x) + ((ac)&0xffffffff) & 0xffffffff); \ + (a) = ROTATE_LEFT((a), (s)); \ +- (a) = (a) + (b) & 0xffffffff; \ ++ (a) = (a) + ((b) & 0xffffffff); \ + } + + #define II(a, b, c, d, x, s, ac) { \ +- (a) = (a) + I((b), (c), (d)) + (x) + ((ac)&0xffffffff) & 0xffffffff; \ ++ (a) = (a) + I((b), (c), (d)) + ((x) + ((ac)&0xffffffff) & 0xffffffff); \ + (a) = ROTATE_LEFT((a), (s)); \ +- (a) = (a) + (b) & 0xffffffff; \ ++ (a) = (a) + ((b) & 0xffffffff); \ + } + + /* +@@ -144,10 +144,10 @@ MD5Update ( + index = context->count[0]>>3 & 0x3F; + + /* Update number of bits */ +- if ((context->count[0] = context->count[0] + (inputLen<<3) & 0xffffffff) ++ if ((context->count[0] = context->count[0] + ((inputLen<<3) & 0xffffffff)) + < (inputLen<<3 & 0xffffffff)) +- context->count[1] = context->count[1] + 1 & 0xffffffff; +- context->count[1] = context->count[1] + (inputLen>>29) & 0xffffffff; ++ context->count[1] = context->count[1] + (1 & 0xffffffff); ++ context->count[1] = context->count[1] + ((inputLen>>29) & 0xffffffff); + + partLen = 64 - index; + +@@ -285,10 +285,10 @@ MD5Transform(md5_type state[4], unsigned + II(c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ + II(b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ + +- state[0] = state[0] + a & 0xffffffff; +- state[1] = state[1] + b & 0xffffffff; +- state[2] = state[2] + c & 0xffffffff; +- state[3] = state[3] + d & 0xffffffff; ++ state[0] = state[0] + (a & 0xffffffff); ++ state[1] = state[1] + (b & 0xffffffff); ++ state[2] = state[2] + (c & 0xffffffff); ++ state[3] = state[3] + (d & 0xffffffff); + + /* + * Zeroize sensitive information. +--- mime.c ++++ mime.c 2013-07-02 10:19:41.993365604 +0000 +@@ -855,10 +855,8 @@ mime_isclean(FILE *f) + continue; + } + latin: +- if (text_chars[i & 0377] == I) { ++ if (text_chars[i & 0377] == I) + isclean |= MIME_LATIN; +- continue; +- } + if (text_chars[i & 0377] == X) { + isclean |= MIME_CTRLCHAR; + break; +@@ -871,10 +869,10 @@ mime_isclean(FILE *f) + break; + } + } while (c != EOF); +- if (lastc != '\n') +- isclean |= MIME_NOTERMNL; + if (isclean & (MIME_CTRLCHAR|MIME_HASNUL)) + isclean &= (MIME_CTRLCHAR|MIME_HASNUL); ++ if (lastc != '\n') ++ isclean |= MIME_NOTERMNL; + clearerr(f); + fseek(f, initial_pos, SEEK_SET); + if ((cp = value("maximum-unencoded-line-length")) != NULL) +@@ -916,8 +914,8 @@ get_mime_convert(FILE *fp, char **conten + int convert; + + *isclean = mime_isclean(fp); +- if (*isclean & MIME_HASNUL || +- *contenttype && ascncasecmp(*contenttype, "text/", 5)) { ++ if ((*isclean & MIME_HASNUL) || ++ (*contenttype && ascncasecmp(*contenttype, "text/", 5))) { + convert = CONV_TOB64; + if (*contenttype == NULL || + ascncasecmp(*contenttype, "text/", 5) == 0) +@@ -990,13 +988,13 @@ mime_write_toqp(struct str *in, FILE *fo + upper = in->s + in->l; + for (p = in->s, l = 0; p < upper; p++) { + if (mustquote(*p&0377) || +- p < upper-1 && p[1] == '\n' && +- blankchar(p[0]&0377) || +- p < upper-4 && l == 0 && ++ (p < upper-1 && p[1] == '\n' && ++ blankchar(p[0]&0377)) || ++ (p < upper-4 && l == 0 && + p[0] == 'F' && p[1] == 'r' && +- p[2] == 'o' && p[3] == 'm' || +- *p == '.' && l == 0 && p < upper-1 && +- p[1] == '\n') { ++ p[2] == 'o' && p[3] == 'm') || ++ (*p == '.' && l == 0 && p < upper-1 && ++ p[1] == '\n')) { + if (l >= 69) { + sz += 2; + fwrite("=\n", sizeof (char), 2, fo); +@@ -1036,8 +1034,8 @@ mime_str_toqp(struct str *in, struct str + out->l = in->l; + upper = in->s + in->l; + for (p = in->s; p < upper; p++) { +- if (mustquote(*p&0377) || p+1 < upper && *(p + 1) == '\n' && +- blankchar(*p & 0377)) { ++ if (mustquote(*p&0377) || (p+1 < upper && *(p + 1) == '\n' && ++ blankchar(*p & 0377))) { + if (inhdr && *p == ' ') { + *q++ = '_'; + } else { +@@ -1347,8 +1345,8 @@ mime_write_tohdr(struct str *in, FILE *f + wbeg == &upper[-1])) + mustquote++; + } +- if (mustquote || broken || (wend - wbeg) >= 74 && +- quoteany) { ++ if (mustquote || broken || ((wend - wbeg) >= 74 && ++ quoteany)) { + for (;;) { + cin.s = lastwordend ? lastwordend : + wbeg; +--- sendout.c ++++ sendout.c 2013-07-02 08:04:20.342719526 +0000 +@@ -229,6 +229,7 @@ attach_file1(struct attachment *ap, FILE + dosign); + #ifdef HAVE_ICONV + tcs = gettcharset(); ++fprintf(stderr, "sendout %s\n", tcs ? tcs : "(null)"); + if (isclean & MIME_UTF8) + { + tcs = "utf-8"; +@@ -1372,10 +1373,10 @@ fmt(char *str, struct name *np, FILE *fo + if (col) { + fwrite(str, sizeof *str, strlen(str), fo); + if ((flags&GFILES) == 0 && +- col == 3 && asccasecmp(str, "to:") == 0 || +- col == 3 && asccasecmp(str, "cc:") == 0 || +- col == 4 && asccasecmp(str, "bcc:") == 0 || +- col == 10 && asccasecmp(str, "Resent-To:") == 0) ++ ((col == 3 && asccasecmp(str, "to:") == 0) || ++ (col == 3 && asccasecmp(str, "cc:") == 0) || ++ (col == 4 && asccasecmp(str, "bcc:") == 0) || ++ (col == 10 && asccasecmp(str, "Resent-To:") == 0))) + is_to = 1; + } + for (; np != NULL; np = np->n_flink) { +--- tty.c ++++ tty.c 2013-07-02 11:02:18.880440821 +0000 +@@ -438,6 +438,6 @@ yorn(char *msg) + do + cp = readtty(msg, NULL); + while (cp == NULL || +- *cp != 'y' && *cp != 'Y' && *cp != 'n' && *cp != 'N'); ++ (*cp != 'y' && *cp != 'Y' && *cp != 'n' && *cp != 'N')); + return *cp == 'y' || *cp == 'Y'; + } diff --git a/mailx.changes b/mailx.changes index e9db0e0..59a4a7e 100644 --- a/mailx.changes +++ b/mailx.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Jul 2 10:29:35 UTC 2013 - werner@suse.de + +- Do not pseudo detect Latin nor UTF-8 in binary attachments (bnc#827010) +- Add patch mailx-12.5-parentheses.dif, that is try to tranquilize + gcc due warning about parentheses (please check!) + ------------------------------------------------------------------- Tue Jun 25 11:58:06 UTC 2013 - coolo@suse.com diff --git a/mailx.spec b/mailx.spec index 6592329..d318b2c 100644 --- a/mailx.spec +++ b/mailx.spec @@ -39,6 +39,8 @@ Patch3: nail-11.25-ttychar.dif Patch4: nail-11.25-toaddr.dif Patch5: mailx-%{version}-mime.dif Patch6: mailx-fix-openssl.patch +#PATCH-FIX-OPENSUSE: Try to tranquilize gcc warning about parentheses (please check!) +Patch7: mailx-12.5-parentheses.dif BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -56,6 +58,7 @@ minor enhancements like the ability to set a "From:" address. %patch4 -p0 -b .toaddr %patch5 -p0 -b .mime %patch6 -p0 -b .ssl +%patch7 -p0 -b .par %patch -p0 %build