- s-nail-14_5_2-mimeheader.patch
  
<http://downloads.sourceforge.net/project/s-nail/s-nail-14_5_2-mimeheader.patch>

    Subject: ehm, .getElementById("blink") needs <span
     =?US-ASCII?Q?id=3D"blink">,?= not =?US-ASCII?Q?class=3D"id"?=

  Such a header would yet be displayed without the " not " in
  between the two encoded words because of faulty
  "encoded-word-continuation" detection (note the quotation
  marks).  The error path could also have been seen in mail
  forwarding and in faulty searching etc.

  This patch is in a row of fixes for my hasty [0f9ad93] from
  2013-03-12 that already caused the v14.2 minor release (because
  of [b608c6b] from 2013-03-14).  Those with mercy may read the
  commit message of [c81afce].

  This is a really critical fix, and for a moment i thought about
  releasing a subminor immediately, but because my massive
  N(ot)-Y(et)-D(ead) rewrite, which already revealed, well, this and
  that, is not yet completed (not to talk about reviewing that one),
  i did not, i.e., just in case i find more bugs.

  I want to emphasize on the last sentence -- *unfortunately* S-nail
  will until at least v15 continue to display a subject like

      Subject: are
        you
        unperfect

  on three successive lines instead of joining it.  Of course this
  was already the case before this bugfix.  :-))

..because i didn't sent the former [BUGFIX] to my `nail-announce'
alias but only to `nail' i also append the bugfix from 2014-01-30:

- s-nail-14_5_2-sort.patch
  <http://downloads.sourceforge.net/project/s-nail/s-nail-14_5_2-sort.patch>

  Reverses (sort(),thread(): use srelax()!, 2014-01-18, [a9b67e9]),
  which was a hasty commit of an untested diff that i've added few
  minutes beforehand:

    As a rather careless last-minute change i've added string relaxation
    to threaded and sorted display, but it's really one more step towards
    lowering memory pressure -- i couldn't resist [a9b67e9] after seeing

  An alternative, forward-heading patch that keeps string relaxation has
  been pushed to [master] as [5e75529] and is also available as
  s-nail-14_5_2-sort-alt.patch.

I highly recommend git(1) users to update their [master] branch.
Look out, you Rock'n Rollers...

--steffen
s-nail-14_5_2-mimeheader.patch, 2014-02-05:

Apply:
  $ cd s-nail-14.5.2
  $ patch -bu < s-nail-14_5_2-mimeheader.patch

Description:
    mime_fromhdr(): fix my rewrite again..
    
    My hasty rewrite [0f9ad93] (mime_fromhdr(): partial rewrite using
    n_iconv_str(), 2013-03-12), just about ninety (90) minutes before
    the release of S-nail v14.1 already caused the bugfix [b608c6b]
    (mime_fromhdr(): never return NULL output.., 2013-03-14), which
    was the sole reason for the release of S-nail v14.2.
    
    Well, about a year later, after tens of thousands of mails,
    including multibyte ones, i wrote myself a message that has shown
    that the rewrite was still buggy -- the header
    
      Subject: ehm, .getElementById("blink") needs <span
       =?US-ASCII?Q?id=3D"blink">,?= not =?US-ASCII?Q?class=3D"id"?=
    
    cannot be viewed correctly, the ", not" will be lost.
    The reason is now understood and this changeset should fix
    mime_fromhdr() so that it'll do what it is assumed to do in the
    current codebase, unless i'm terribly mistaken.
    
    Because i bickered some time in private, i WANT to add that the
    real problem is that the codebase is weird INSOFAR as that i still
    don't really understand the WAY it works, because THAT IS SICK.
    I.e., in my brain i assume this function effectively is
    rfc_2047_decode(), meant to decode encoded words as specified in
    RFC 2047, but that's simply not true, and FOR QUITE SOME TIME,
    because of the embedded newlines that may be in the data and need
    to passed through for at least the case that we send data to the
    display.  I slowly get around that schizophrenic codebase while
    also converting it to a straight one, but that will take years.
    Until then we need to strip whitespace in between multiple
    adjacent encoded words, while passing through newlines and
    whitespace that follows newlines, regardless of whatever.
    I hope this will do it until we are sane.
---
 mime.c | 63 +++++++++++++++++++++++++++++++++++++++------------------------
 1 file changed, 39 insertions(+), 24 deletions(-)

diff --git a/mime.c b/mime.c
index ccb0061..6ee55cc 100644
--- a/mime.c
+++ b/mime.c
@@ -863,20 +863,26 @@ jclear:
 	goto jleave;
 }
 
-/*
- * Convert header fields from RFC 1522 format
- * TODO mime_fromhdr(): NO error handling, fat; REWRITE **ASAP**
- */
 FL void
 mime_fromhdr(struct str const *in, struct str *out, enum tdflags flags)
 {
-	/* TODO mime_fromhdr(): is called with strings that contain newlines;
-	 * TODO this is the usual newline problem all around the codebase;
-	 * TODO i.e., if we strip it, then the display misses it ;} */
+   /* TODO mime_fromhdr(): is called with strings that contain newlines;
+    * TODO this is the usual newline problem all around the codebase;
+    * TODO i.e., if we strip it, then the display misses it ;>
+    * TODO this is why it is so messy and why S-nail v14.2 plus additional
+    * TODO patch for v14.5.2 (and maybe even v14.5.3 subminor) occurred, and
+    * TODO why our display reflects what is contained in the message: the 1:1
+    * TODO relationship of message content and display!
+    * TODO instead a header line should be decoded to what it is (a single
+    * TODO line that is) and it should be objective to the backend wether
+    * TODO it'll be folded to fit onto the display or not, e.g., for search
+    * TODO purposes etc.  then the only condition we have to honour in here
+    * TODO is that whitespace in between multiple adjacent MIME encoded words
+    * TODO รก la RFC 2047 is discarded; i.e.: this function should deal with
+    * TODO RFC 2047 and be renamed: mime_fromhdr() -> mime_rfc2047_decode() */
 	struct str cin, cout;
 	char *p, *op, *upper, *cs, *cbeg;
-	int convert;
-	size_t lastoutl = (size_t)-1;
+   ui32_t convert, lastenc, lastoutl;
 #ifdef HAVE_ICONV
 	char const *tcs;
 	iconv_t fhicd = (iconv_t)-1;
@@ -894,6 +900,7 @@ mime_fromhdr(struct str const *in, struct str *out, enum tdflags flags)
 #endif
 	p = in->s;
 	upper = p + in->l;
+   lastenc = lastoutl = 0;
 
 	while (p < upper) {
 		op = p;
@@ -949,8 +956,7 @@ mime_fromhdr(struct str const *in, struct str *out, enum tdflags flags)
 					--cout.l;
 			} else
 				(void)qp_decode(&cout, &cin, NULL);
-			if (lastoutl != (size_t)-1)
-				out->l = lastoutl;
+			out->l = lastenc;
 #ifdef HAVE_ICONV
 			if ((flags & TD_ICONV) && fhicd != (iconv_t)-1) {
 				cin.s = NULL, cin.l = 0; /* XXX string pool ! */
@@ -966,21 +972,30 @@ mime_fromhdr(struct str const *in, struct str *out, enum tdflags flags)
 #ifdef HAVE_ICONV
 			}
 #endif
-			lastoutl = out->l;
+			lastenc = lastoutl = out->l;
 			free(cout.s);
-		} else {
-jnotmime:
-			p = op;
-			convert = 1;
-			while ((op = p + convert) < upper &&
-					(op[0] != '=' || op[1] != '?'))
-				++convert;
-			out = n_str_add_buf(out, p, convert);
-			p += convert;
-			if (! blankchar(p[-1]))
-				lastoutl = (size_t)-1;
-		}
+		} else
+jnotmime: {
+         bool_t onlyws;
+
+         p = op;
+         onlyws = (lastenc > 0);
+         for (;;) {
+            if (++op == upper)
+               break;
+            if (op[0] == '=' && (PTRCMP(op + 1, ==, upper) || op[1] == '?'))
+               break;
+            if (onlyws && !blankchar(*op))
+               onlyws = FAL0;
+         }
+
+         out = n_str_add_buf(out, p, PTR2SIZE(op - p));
+         p = op;
+         if (!onlyws || lastoutl != lastenc)
+            lastenc = out->l;
+         lastoutl = out->l;
 	}
+  }
 	out->s[out->l] = '\0';
 
 	if (flags & TD_ISPR) {
s-nail-14_5_2-sort.patch, 2014-01-30:

Apply:
  $ cd s-nail-14.5.2
  $ patch -bu < s-nail-14_5_2-sort.patch

Description:
Reverses (sort(),thread(): use srelax()!, 2014-01-18, [a9b67e9]), which
was a hasty commit of an untested diff that i've added few minutes
beforehand.
It was of course wrong.
The problem (no memory relaxation during entire sort operation) requires
a different approach (either only relax when we don't need to hold
dope storage (as for SORT_TO/SORT_FROM/SORT_SUBJECT/+) or use heap
memory for those allocations, then).

s-nail-14_5_2-sort-alt.patch is an alternative working thesis that uses
heap allocations, thus continues to relax the dope storage.
This version has been pushed to [master].

diff --git a/thread.c b/thread.c
index 3ac5966..9ec1ac9 100644
--- a/thread.c
+++ b/thread.c
@@ -361,8 +361,6 @@ makethreads(struct message *m, long cnt, int nmail)
 		return;
 	mprime = nextprime(cnt);
 	mt = scalloc(mprime, sizeof *mt);
-
-	srelax_hold();
 	for (i = 0; i < cnt; i++) {
 		if ((m[i].m_flag&MHIDDEN) == 0) {
 			mlook(NULL, mt, &m[i], mprime);
@@ -376,7 +374,6 @@ makethreads(struct message *m, long cnt, int nmail)
 		m[i].m_level = 0;
 		if (!nmail && !(inhook&2))
 			m[i].m_collapsed = 0;
-		srelax();
 	}
 	/*
 	 * Most folders contain the eldest messages first. Traversing
@@ -387,12 +384,8 @@ makethreads(struct message *m, long cnt, int nmail)
 	 * are replies to the one message, and are sorted such that
 	 * youngest messages occur first.
 	 */
-	for (i = cnt-1; i >= 0; i--) {
+	for (i = cnt-1; i >= 0; i--)
 		lookup(&m[i], mt, mprime);
-		srelax();
-	}
-	srelax_rele();
-
 	threadroot = interlink(m, cnt, nmail);
 	finalize(threadroot);
 	free(mt);
@@ -572,8 +565,6 @@ sort(void *vp)
 	default:
 		break;
 	}
-
-	srelax_hold();
 	for (n = 0, i = 0; i < msgCount; i++) {
 		mp = &message[i];
 		if ((mp->m_flag&MHIDDEN) == 0) {
@@ -637,10 +628,7 @@ sort(void *vp)
 		mp->m_child = mp->m_younger = mp->m_elder = mp->m_parent = NULL;
 		mp->m_level = 0;
 		mp->m_collapsed = 0;
-		srelax();
 	}
-	srelax_rele();
-
 	if (n > 0) {
 		qsort(ms, n, sizeof *ms, func);
 		threadroot = &message[ms[0].ms_n];
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
_______________________________________________
S-nail-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/s-nail-users

Reply via email to