[gmime] Modified param value parser to be less strict



commit 7fed9045689eb543953bf592086df89dc6ad74d4
Author: Jeffrey Stedfast <fejj gnome org>
Date:   Mon Aug 30 21:05:00 2010 -0400

    Modified param value parser to be less strict
    
    2010-08-30  Jeffrey Stedfast  <fejj novell com>
    
    	* gmime/gmime-param.c (decode_token): Make less strict in order
    	* to
    	handle unquoted boundary values containing '=' (and other
    illegal
    	characters).

 ChangeLog           |    6 ++++++
 gmime/gmime-param.c |   13 +++++++++++++
 2 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 43ca60a..eb4e88e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-08-30  Jeffrey Stedfast  <fejj novell com>
+
+	* gmime/gmime-param.c (decode_token): Make less strict in order to
+	handle unquoted boundary values containing '=' (and other illegal
+	characters).
+
 2010-08-26  Jeffrey Stedfast  <fejj novell com>
 
 	* gmime/internet-address.c (_internet_address_set_name): Don't
diff --git a/gmime/gmime-param.c b/gmime/gmime-param.c
index 5d3e3bf..7a1f68a 100644
--- a/gmime/gmime-param.c
+++ b/gmime/gmime-param.c
@@ -173,8 +173,21 @@ decode_token (const char **in)
 	decode_lwsp (&inptr);
 	
 	start = inptr;
+#ifdef STRICT_PARSER
 	while (is_ttoken (*inptr))
 		inptr++;
+#else
+	/* Broken mail clients like to make our lives difficult. Scan
+	 * for a ';' instead of trusting that the client followed the
+	 * specification. */
+	while (*inptr && *inptr != ';')
+		inptr++;
+	
+	/* Scan backwards over any trailing lwsp */
+	while (inptr > start && is_lwsp (inptr[-1]))
+		inptr--;
+#endif
+	
 	if (inptr > start) {
 		*in = inptr;
 		return g_strndup (start, (size_t) (inptr - start));



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