Hello community,

here is the log from the commit of package mailx for openSUSE:Factory checked 
in at 2012-04-17 21:59:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mailx (Old)
 and      /work/SRC/openSUSE:Factory/.mailx.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mailx", Maintainer is "wer...@suse.com"

Changes:
--------
--- /work/SRC/openSUSE:Factory/mailx/mailx.changes      2011-09-23 
02:12:34.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.mailx.new/mailx.changes 2012-04-17 
21:59:58.000000000 +0200
@@ -1,0 +2,11 @@
+Fri Mar 23 18:39:38 UTC 2012 - wer...@suse.de
+
+- Avoid header rewrite in case of specified ttycharset in wrong
+  locale but subject in ttycharset (bnc#753340)
+
+-------------------------------------------------------------------
+Fri Mar 23 14:01:02 UTC 2012 - wer...@suse.de
+
+- Try to support not only UTF-8 but also latin text encodings (bnc#753340) 
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mailx.spec ++++++
--- /var/tmp/diff_new_pack.mBzQp4/_old  2012-04-17 22:00:00.000000000 +0200
+++ /var/tmp/diff_new_pack.mBzQp4/_new  2012-04-17 22:00:00.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package mailx
 #
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -15,20 +15,20 @@
 # Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
-# norootforbuild
-
 
 Name:           mailx
-BuildRequires:  krb5-devel openssl-devel pcre postfix
+BuildRequires:  krb5-devel
+BuildRequires:  openssl-devel
+BuildRequires:  pcre
+BuildRequires:  postfix
 Url:            http://heirloom.sourceforge.net/mailx.html
-License:        BSD-3-Clause
-Group:          Productivity/Networking/Email/Utilities
 Provides:       mail
 Recommends:     smtp_daemon
-AutoReqProv:    on
 Version:        12.5
-Release:        1
+Release:        0
 Summary:        A MIME-Capable Implementation of the mailx Command
+License:        BSD-3-Clause
+Group:          Productivity/Networking/Email/Utilities
 Source:         mailx-%{version}.tar.bz2
 Patch:          mailx-%{version}.dif
 Patch1:         nail-11.25-path.dif

++++++ mailx-12.5-mime.dif ++++++
--- /var/tmp/diff_new_pack.mBzQp4/_old  2012-04-17 22:00:00.000000000 +0200
+++ /var/tmp/diff_new_pack.mBzQp4/_new  2012-04-17 22:00:00.000000000 +0200
@@ -1,42 +1,138 @@
 --- def.h
-+++ def.h      2011-05-13 11:04:51.779926337 +0000
-@@ -142,7 +142,8 @@ enum mimeclean {
++++ def.h      2012-03-23 13:57:44.000000000 +0000
+@@ -142,7 +142,9 @@ enum mimeclean {
        MIME_LONGLINES  = 002,          /* has lines too long for RFC 2822 */
        MIME_CTRLCHAR   = 004,          /* contains control characters */
        MIME_HASNUL     = 010,          /* contains \0 characters */
 -      MIME_NOTERMNL   = 020           /* lacks a terminating newline */
 +      MIME_NOTERMNL   = 020,          /* lacks a terminating newline */
-+      MIME_UTF8       = 040           /* UTF-8 high bit characters */
++      MIME_UTF8       = 040,          /* UTF-8 high bit multi byte characters 
*/
++      MIME_LATIN      = 0100          /* Latin high bit single byte 
characters */
  };
  
  enum tdflags {
 --- mime.c
-+++ mime.c     2011-05-13 11:04:51.779926337 +0000
-@@ -258,8 +258,11 @@ getcharset(int isclean)
-       if (isclean & (MIME_CTRLCHAR|MIME_HASNUL))
-               charset = NULL;
-       else if (isclean & MIME_HIGHBIT) {
--              charset = (wantcharset && wantcharset != (char *)-1) ?
--                      wantcharset : value("charset");
-+              if (isclean & MIME_UTF8)
-+                      charset = defcharset;
-+              if (charset == NULL)
-+                      charset = (wantcharset && wantcharset != (char *)-1) ?
-+                              wantcharset : value("charset");
-               if (charset == NULL) {
-                       char *t = value("ttycharset");
-                       if (t == NULL || (ascncasecmp("ANSI_X3.4", t, 9) == 0))
-@@ -737,6 +740,7 @@ mime_isclean(FILE *f)
-               lastc = c;
-               c = getc(f);
-               curlen++;
-+      check:
-               if (c == '\n' || c == EOF) {
-                       /*
-                        * RFC 821 imposes a maximum line length of 1000
-@@ -749,10 +753,38 @@ mime_isclean(FILE *f)
++++ mime.c     2012-03-30 14:50:10.318065066 +0000
+@@ -302,13 +302,78 @@ gettcharset(void)
+       return t;
+ }
+ 
++#define F 0   /* character never appears in mail text */
++#define T 1   /* character appears in plain ASCII text */
++#define I 2   /* character appears in ISO-8859 text */
++#define X 3   /* character appears in non-ISO extended ASCII (Mac, IBM PC) */
++
++static char text_chars[256] = {
++    /* NUL                  BEL BS HT LF    FF CR    */
++      F, F, F, F, F, F, F, F, T, T, T, F, F, T, F, F,  /* 0x0X */
++      /*                              ESC          */
++      F, F, F, F, F, F, F, F, F, F, F, T, F, F, F, F,  /* 0x1X */
++      T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x2X */
++      T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x3X */
++      T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x4X */
++      T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x5X */
++      T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,  /* 0x6X */
++      T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, F,  /* 0x7X */
++      /*            NEL                            */
++      X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,  /* 0x8X */
++      X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,  /* 0x9X */
++      I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,  /* 0xaX */
++      I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,  /* 0xbX */
++      I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,  /* 0xcX */
++      I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,  /* 0xdX */
++      I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I,  /* 0xeX */
++      I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I   /* 0xfX */
++};
++
++static int encflags;
++static void
++test_enc(const char *s)
++{
++      int c = *s;
++      if (c & 0100) {
++              int n, follow;
++
++              if      ((c & 040) == 0)        /* 110xxxxx */
++                      follow = 1;
++              else if ((c & 020) == 0)        /* 1110xxxx */
++                      follow = 2;
++              else if ((c & 010) == 0)        /* 11110xxx */
++                      follow = 3;
++              else if ((c & 004) == 0)        /* 111110xx */
++                      follow = 4;
++              else if ((c & 002) == 0)        /* 1111110x */
++                      follow = 5;
++              else
++                      return;
++
++              for (n = 1; n <= follow; n++) {
++                      if ((c = *(s+n)) == '\0')
++                              goto latin;
++                      if ((c & 0200) == 0 || (c & 0100))
++                              goto latin;
++              }
++              encflags = MIME_UTF8;
++              return;
++      }
++latin:
++      c = *s;
++      if (text_chars[c & 0377] == I)
++              encflags = MIME_LATIN;
++}
++
+ static int 
+ has_highbit(const char *s)
+ {
+       if (s) {
+               do
+-                      if (*s & 0200)
++                      if (*s & 0200) {
++                              test_enc(s);
+                               return 1;
++                      }
+               while (*s++ != '\0');
+       }
+       return 0;
+@@ -328,6 +393,7 @@ name_highbit(struct name *np)
+ char *
+ need_hdrconv(struct header *hp, enum gfield w)
+ {
++      encflags = 0;
+       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
+       if (w & GSUBJECT && has_highbit(hp->h_subject))
+               goto needs;
+       return NULL;
+-needs:        return getcharset(MIME_HIGHBIT);
++needs:        return getcharset(MIME_HIGHBIT|encflags);
+ }
+ 
+ #ifdef        HAVE_ICONV
+@@ -441,7 +507,7 @@ iconv_open_ft(const char *tocode, const
+        * be used to check the validity of the input even with
+        * identical encoding names.
+        */
+-      if (strcmp(t, f) == 0)
++      if (asccasecmp(t, f) == 0)
+               errno = 0;
+       return (iconv_t)-1;
+ }
+@@ -665,7 +731,7 @@ mime_tline(char *x, char *l)
+                       l++;
+               if (*l != '\0')
+                       *l++ = '\0';
+-              if (strcmp(x, n) == 0) {
++              if (asccasecmp(x, n) == 0) {
+                       match = 1;
+                       break;
+               }
+@@ -748,11 +814,54 @@ mime_isclean(FILE *f)
+                               maxlen = curlen;
                        curlen = 1;
                } else if (c & 0200) {
++                      int i = c;
                        isclean |= MIME_HIGHBIT;
 +                      if (c & 0100) {
 +                              int n, follow;
@@ -57,24 +153,38 @@
 +                              for (n = 0; n < follow; n++) {
 +                                      lastc = c;
 +                                      c = getc(f);
++                                      curlen++;
 +
-+                                      if ((c & 0200) == 0 || (c & 0100) ||
-+                                          (c == '\0') || (c == '\n') || (c == 
EOF)) {
-+                                              curlen += n;
-+                                              goto check;
++                                      if (c == '\0') {
++                                              isclean |= MIME_HASNUL;
++                                              goto latin;
++                                      }
++                                      if ((c & 0200) == 0 || (c & 0100))
++                                              goto latin;
++                                      if ((c == '\n') || (c == EOF)) {
++                                              if (curlen > maxlen)
++                                                          maxlen = curlen;
++                                              curlen = 1;
++                                              goto latin;
 +                                      }
 +                              }
 +                              isclean |= MIME_UTF8;
++                              continue;
 +                      }
++              latin:
++                      if (text_chars[i & 0377] == I)
++                              isclean |= MIME_LATIN;
++                      if (text_chars[i & 0377] == X)
++                              isclean |= MIME_CTRLCHAR;
                } else if (c == '\0') {
                        isclean |= MIME_HASNUL;
                        break;
 -              } else if ((c < 040 && (c != '\t' && c != '\f')) || c == 0177) {
-+              } else if ((c < 040 && (c != '\t' && c != '\f' && c != '\b')) 
|| c == 0177) {
++              } else if (text_chars[c & 0377] == F) {
                        isclean |= MIME_CTRLCHAR;
                }
        } while (c != EOF);
-@@ -826,12 +858,15 @@ get_mime_convert(FILE *fp, char **conten
+@@ -826,11 +935,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.
@@ -85,32 +195,128 @@
                                *contenttype = "application/octet-stream";
                } else if (*contenttype == NULL)
                        *contenttype = "text/plain";
--      }
 +      } else if (ascncasecmp(*contenttype, "text/", 5) == 0)
++      {
 +              *charset = getcharset(*isclean);
+       }
        return convert;
  }
+@@ -989,8 +1103,14 @@ mime_fromhdr(struct str *in, struct str
+ #ifdef        HAVE_ICONV
+       iconv_t fhicd = (iconv_t)-1;
+ #endif
++      enum mimeclean isclean = 0;
  
+       tcs = gettcharset();
++
++      encflags = 0;
++      if (has_highbit(in->s))
++              isclean |= (MIME_HIGHBIT|encflags);
++
+       maxstor = in->l;
+       out->s = smalloc(maxstor + 1);
+       out->l = 0;
+@@ -1010,7 +1130,7 @@ mime_fromhdr(struct str *in, struct str
+ #ifdef        HAVE_ICONV
+                       if (fhicd != (iconv_t)-1)
+                               iconv_close(fhicd);
+-                      if (strcmp(cs, tcs))
++                      if (asccasecmp(cs, tcs))
+                               fhicd = iconv_open_ft(tcs, cs);
+                       else
+                               fhicd = (iconv_t)-1;
+@@ -1105,12 +1225,17 @@ notmime:
+       }
+ fromhdr_end:
+       *q = '\0';
+-      if (flags & TD_ISPR) {
++      if ((flags & TD_ISPR) && (isclean & MIME_HIGHBIT)) {
+               struct str      new;
++              if ((isclean & MIME_UTF8) && asccasecmp("utf-8", tcs) == 0)
++                      goto skip;
++              if ((isclean & MIME_LATIN) && ascncasecmp("iso-8859-", tcs, 9) 
== 0)
++                      goto skip;
+               makeprint(out, &new);
+               free(out->s);
+               *out = new;
+       }
++skip:
+       if (flags & TD_DELCTRL)
+               out->l = delctrl(out->s, out->l);
+ #ifdef        HAVE_ICONV
 --- sendout.c
-+++ sendout.c  2011-05-13 11:07:31.623926237 +0000
-@@ -230,6 +230,11 @@ attach_file1(struct attachment *ap, FILE
-               "\n--%s\n"
-               "Content-Type: %s",
-               send_boundary, contenttype);
++++ sendout.c  2012-03-23 18:30:50.949933289 +0000
+@@ -226,6 +226,23 @@ attach_file1(struct attachment *ap, FILE
+               charset = ap->a_charset;
+       convert = get_mime_convert(fi, &contenttype, &charset, &isclean,
+                       dosign);
++#ifdef        HAVE_ICONV
 +      tcs = gettcharset();
-+#ifdef HAVE_ICONV
-+      if (wantcharset && ascncasecmp(wantcharset, "ANSI_X3.4", 9))
-+              charset = wantcharset;
++      if (isclean & MIME_UTF8)
++      {
++              tcs = "utf-8";
++      }
++      if (isclean & MIME_LATIN) {
++              tcs = value("charset");
++              if (tcs == NULL && wantcharset && wantcharset != (char *)-1)
++                      tcs = wantcharset;
++      }
++      if (tcs == NULL)  {
++              contenttype = "application/octet-stream";
++              charset = NULL;
++              convert = CONV_TOB64;
++      }
 +#endif
-       if (charset == NULL)
-               putc('\n', fo);
-       else
-@@ -259,7 +264,7 @@ attach_file1(struct attachment *ap, FILE
+       fprintf(fo,
+               "\n--%s\n"
+               "Content-Type: %s",
+@@ -255,11 +272,10 @@ attach_file1(struct attachment *ap, FILE
+               iconv_close(iconvd);
+               iconvd = (iconv_t)-1;
+       }
+-      tcs = gettcharset();
        if ((isclean & (MIME_HASNUL|MIME_CTRLCHAR)) == 0 &&
                        ascncasecmp(contenttype, "text/", 5) == 0 &&
-                       isclean & MIME_HIGHBIT &&
+-                      isclean & MIME_HIGHBIT &&
 -                      charset != NULL) {
-+                      charset != NULL && tcs != NULL && asccasecmp(charset, 
tcs)) {
++                      (isclean & MIME_HIGHBIT) &&
++                      charset != NULL && tcs != NULL) {
                if ((iconvd = iconv_open_ft(charset, tcs)) == (iconv_t)-1 &&
                                errno != 0) {
                        if (errno == EINVAL)
+@@ -467,11 +483,12 @@ infix(struct header *hp, FILE *fi, int d
+       }
+       rm(tempMail);
+       Ftfree(&tempMail);
+-      convert = get_mime_convert(fi, &contenttype, &charset,
+-                      &isclean, dosign);
++      convert = get_mime_convert(fi, &contenttype, &charset, &isclean,
++                      dosign);
+ #ifdef        HAVE_ICONV
+       tcs = gettcharset();
+-      if ((convhdr = need_hdrconv(hp, GTO|GSUBJECT|GCC|GBCC|GIDENT)) != 0) {
++      if ((convhdr = need_hdrconv(hp, GTO|GSUBJECT|GCC|GBCC|GIDENT)) != 0 &&
++          tcs != NULL) {
+               if (iconvd != (iconv_t)-1)
+                       iconv_close(iconvd);
+               if ((iconvd = iconv_open_ft(convhdr, tcs)) == (iconv_t)-1
+@@ -505,10 +522,17 @@ infix(struct header *hp, FILE *fi, int d
+               iconv_close(iconvd);
+               iconvd = (iconv_t)-1;
+       }
++      if (isclean & MIME_UTF8)
++              tcs = "utf-8";
++      if (isclean & MIME_LATIN) {
++              tcs = value("charset");
++              if (tcs == NULL && wantcharset && wantcharset != (char *)-1)
++                      tcs = wantcharset;
++      }
+       if ((isclean & (MIME_HASNUL|MIME_CTRLCHAR)) == 0 &&
+                       ascncasecmp(contenttype, "text/", 5) == 0 &&
+-                      isclean & MIME_HIGHBIT &&
+-                      charset != NULL) {
++                      (isclean & MIME_HIGHBIT) &&
++                      charset != NULL && tcs != NULL) {
+               if (iconvd != (iconv_t)-1)
+                       iconv_close(iconvd);
+               if ((iconvd = iconv_open_ft(charset, tcs)) == (iconv_t)-1

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to