[gmime/gmime-2-4] Apply the same iconv flush fix to the charset filter



commit dc9d83bd26c61ff9c2ccc24af95625d9f8a5206b
Author: Jeffrey Stedfast <fejj gnome org>
Date:   Thu Dec 15 22:19:09 2011 -0500

    Apply the same iconv flush fix to the charset filter
    
    2011-12-15  Jeffrey Stedfast  <fejj gnome org>
    
    	* gmime/gmime-filter-charset.c (flter_complete): Same as
    	charset_convert().

 ChangeLog                    |    3 +++
 gmime/gmime-filter-charset.c |   10 +++++++++-
 2 files changed, 12 insertions(+), 1 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 1ee1bb8..c0b7558 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2011-12-15  Jeffrey Stedfast  <fejj gnome org>
 
+	* gmime/gmime-filter-charset.c (flter_complete): Same as
+	charset_convert().
+
 	* gmime/gmime-utils.c (charset_convert): Make sure the output
 	buffer is large enough when flushing the conversion descriptor.
 
diff --git a/gmime/gmime-filter-charset.c b/gmime/gmime-filter-charset.c
index 973c71f..58772f9 100644
--- a/gmime/gmime-filter-charset.c
+++ b/gmime/gmime-filter-charset.c
@@ -258,7 +258,15 @@ filter_complete (GMimeFilter *filter, char *in, size_t len, size_t prespace,
 	}
 	
 	/* flush the iconv conversion */
-	iconv (charset->cd, NULL, NULL, &outbuf, &outleft);
+	while (iconv (charset->cd, NULL, NULL, &outbuf, &outleft) == (size_t) -1) {
+		if (errno != E2BIG)
+			break;
+		
+		converted = outbuf - filter->outbuf;
+		g_mime_filter_set_size (filter, filter->outsize + 16, TRUE);
+		outbuf = filter->outbuf + converted;
+		outleft = filter->outsize - converted;
+	}
 	
 	*out = filter->outbuf;
 	*outlen = outbuf - filter->outbuf;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]