0.9.7claws16
authorChristoph Hohmann <reboot@gmx.ch>
Wed, 3 Dec 2003 21:41:48 +0000 (21:41 +0000)
committerChristoph Hohmann <reboot@gmx.ch>
Wed, 3 Dec 2003 21:41:48 +0000 (21:41 +0000)
* src/procmime.c
        use default Content-Type as specified in RFC2045 if
        Content-Type header is syntactically incorrect

Note to Alfons: Using the default if the header is syntactially
                incorrect also means we should not try to parse
the rest of the header, correct?

ChangeLog.claws
configure.ac
src/procmime.c

index 687f36bfd8c141101f88243d61a9fe2b326e4e3f..1ef72dc3ec406ab0b351e9bee4ebeb3983ac4f23 100644 (file)
@@ -1,3 +1,9 @@
+2003-12-03 [christoph] 0.9.7claws16
+
+       * src/procmime.c
+               use default Content-Type as specified in RFC2045 if
+               Content-Type header is syntactically incorrect
+
 2003-12-03 [christoph] 0.9.7claws15
 
        * src/addressbook.c
index 0afc955741c7db7617fe09171685674bbe9d159b..1afdc138fbb5e79fab8442c1311daf59e22e4a98 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=7
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=15
+EXTRA_VERSION=16
 if test $EXTRA_VERSION -eq 0; then
     VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}claws
 else
index b9c1b57bec6f501cc2a09bd1e1529afdc842ce88..4cad122ccfebc91d1fc47ceabfcadb9ccf067fa7 100644 (file)
@@ -1089,8 +1089,6 @@ static void procmime_parse_content_type(const gchar *content_type, MimeInfo *mim
        
        g_return_if_fail(content_type != NULL);
        g_return_if_fail(mimeinfo != NULL);
-       
-       mimeinfo->type = MIMETYPE_UNKNOWN;
 
        /* Split content type into parts and remove trailing
           and leading whitespaces from all strings */
@@ -1101,21 +1099,33 @@ static void procmime_parse_content_type(const gchar *content_type, MimeInfo *mim
 
        /* Get mimeinfo->type and mimeinfo->subtype */
        str = content_type_parts[0];
-       if (str == NULL) {
+       /* RFC 2045, page 13 says that the mime subtype is MANDATORY;
+        * if it's not available we use the default Content-Type */
+       if ((str == NULL) || (str[0] == '\0') || (strchr(str, '/') == NULL)) {
+               mimeinfo->type = MIMETYPE_TEXT;
+               mimeinfo->subtype = g_strdup("plain");
+               if(g_hash_table_lookup(mimeinfo->parameters,
+                                      "charset") == NULL)
+                       g_hash_table_insert(mimeinfo->parameters,
+                                           g_strdup("charset"),
+                                           g_strdup("us-ascii"));
                g_strfreev(content_type_parts);
                return;
-       }
-       for (typetablearray = mime_type_table; typetablearray->str != NULL; typetablearray++) {
-               if (g_strncasecmp(str, typetablearray->str, strlen(typetablearray->str)) == 0 &&
-                   str[strlen(typetablearray->str)] == '/') {
-                       mimeinfo->type = typetablearray->type;
-                       mimeinfo->subtype = g_strdup(str + strlen(typetablearray->str) + 1);
-                       break;
+       } else {
+               mimeinfo->type = MIMETYPE_UNKNOWN;
+               for (typetablearray = mime_type_table; typetablearray->str != NULL; typetablearray++) {
+                       if (g_strncasecmp(str, typetablearray->str, strlen(typetablearray->str)) == 0 &&
+                           str[strlen(typetablearray->str)] == '/') {
+                               mimeinfo->type = typetablearray->type;
+                               mimeinfo->subtype = g_strdup(str + strlen(typetablearray->str) + 1);
+                               break;
+                       }
                }
+
+               /* Get mimeinfo->parmeters */
+               add_to_mimeinfo_parameters(&content_type_parts[1], mimeinfo);
        }
 
-       /* Get mimeinfo->parmeters */
-       add_to_mimeinfo_parameters(&content_type_parts[1], mimeinfo);
        g_strfreev(content_type_parts);
 }
 
@@ -1191,7 +1201,9 @@ void procmime_parse_mimepart(MimeInfo *parent,
        } else {
                mimeinfo->type = MIMETYPE_TEXT;
                mimeinfo->subtype = g_strdup("plain");
-               g_hash_table_insert(mimeinfo->parameters, g_strdup("charset"), g_strdup("us-ascii"));
+               if(g_hash_table_lookup(mimeinfo->parameters,
+                                      "charset") == NULL)
+                       g_hash_table_insert(mimeinfo->parameters, g_strdup("charset"), g_strdup("us-ascii"));
        }
 
        if (content_encoding != NULL) {