2008-01-23 [colin] 3.2.0cvs65
authorColin Leroy <colin@colino.net>
Wed, 23 Jan 2008 17:26:30 +0000 (17:26 +0000)
committerColin Leroy <colin@colino.net>
Wed, 23 Jan 2008 17:26:30 +0000 (17:26 +0000)
* src/procmime.c
Fix bug 1486, 'Re: Incorrect content when replying'
Revert to full scan if short scan found only 0-length
text parts

ChangeLog
PATCHSETS
configure.ac
src/procmime.c

index 0de91d437e89eb54d3b1a4a3775f66d569c44562..c20ebeb219d346c43897cd6e0cc74ec8b371cfae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2008-01-23 [colin]     3.2.0cvs65
+
+       * src/procmime.c
+               Fix bug 1486, 'Re: Incorrect content when replying'
+               Revert to full scan if short scan found only 0-length
+               text parts
+
 2008-01-23 [paul]      3.2.0cvs64
 
        * src/prefs_folder_item.c
index f0daee013704a6c7aa3f317a23d98542be969beb..13a1bf8999ced9ab0ffb8762247f762a68583697 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.61.2.77 -r 1.61.2.78 src/account.c;  cvs diff -u -r 1.11.2.9 -r 1.11.2.10 src/account.h;  cvs diff -u -r 1.382.2.432 -r 1.382.2.433 src/compose.c;  cvs diff -u -r 1.94.2.168 -r 1.94.2.169 src/messageview.c;  cvs diff -u -r 1.395.2.352 -r 1.395.2.353 src/summaryview.c;  cvs diff -u -r 1.36.2.132 -r 1.36.2.133 src/common/utils.c;  cvs diff -u -r 1.20.2.58 -r 1.20.2.59 src/common/utils.h;  ) > 3.2.0cvs62.patchset
 ( cvs diff -u -r 1.213.2.175 -r 1.213.2.176 src/folder.c;  cvs diff -u -r 1.87.2.52 -r 1.87.2.53 src/folder.h;  cvs diff -u -r 1.115.2.182 -r 1.115.2.183 src/main.c;  cvs diff -u -r 1.274.2.230 -r 1.274.2.231 src/mainwindow.c;  ) > 3.2.0cvs63.patchset
 ( cvs diff -u -r 1.52.2.55 -r 1.52.2.56 src/prefs_folder_item.c;  ) > 3.2.0cvs64.patchset
+( cvs diff -u -r 1.49.2.106 -r 1.49.2.107 src/procmime.c;  ) > 3.2.0cvs65.patchset
index 7abe7cfb9098d0accd4d832b826a7fa4b919a3d3..d08415cb2c74f90404f3b26abc7ee3f98a4420a1 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=2
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=64
+EXTRA_VERSION=65
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 022907da7aa2c6a74e3a6b93290c060fb5bda67b..0186a824cf5287c95167e6fcfb3548012580cb3f 100644 (file)
@@ -752,19 +752,40 @@ FILE *procmime_get_first_text_content(MsgInfo *msginfo)
 {
        FILE *outfp = NULL;
        MimeInfo *mimeinfo, *partinfo;
+       gboolean empty_ok = FALSE, short_scan = TRUE;
        START_TIMING("");
        g_return_val_if_fail(msginfo != NULL, NULL);
 
-       mimeinfo = procmime_scan_message_short(msginfo);
+       /* first we try to short-scan (for speed), refusing empty parts */
+scan_again:
+       if (short_scan)
+               mimeinfo = procmime_scan_message_short(msginfo);
+       else
+               mimeinfo = procmime_scan_message(msginfo);
        if (!mimeinfo) return NULL;
 
        partinfo = mimeinfo;
-       while (partinfo && partinfo->type != MIMETYPE_TEXT) {
+       while (partinfo && (partinfo->type != MIMETYPE_TEXT ||
+              (partinfo->length == 0 && !empty_ok))) {
                partinfo = procmime_mimeinfo_next(partinfo);
        }
        if (partinfo)
                outfp = procmime_get_text_content(partinfo);
-
+       else if (!empty_ok && short_scan) {
+               /* if short scan didn't find a non-empty part, rescan
+                * fully for non-empty parts
+                */
+               short_scan = FALSE;
+               procmime_mimeinfo_free_all(mimeinfo);
+               goto scan_again;
+       } else if (!empty_ok && !short_scan) {
+               /* if full scan didn't find a non-empty part, rescan
+                * accepting empty parts 
+                */
+               empty_ok = TRUE;
+               procmime_mimeinfo_free_all(mimeinfo);
+               goto scan_again;
+       }
        procmime_mimeinfo_free_all(mimeinfo);
        END_TIMING();
        return outfp;