* src/procmime.[ch]
authorAlfons Hoogervorst <alfons@proteus.demon.nl>
Thu, 26 Feb 2004 20:21:58 +0000 (20:21 +0000)
committerAlfons Hoogervorst <alfons@proteus.demon.nl>
Thu, 26 Feb 2004 20:21:58 +0000 (20:21 +0000)
  src/compose.c
  src/mimeview.c
  src/textview.c
      use/add procmime_get_content_type_str() as a safe wrapper
      for returning a Content-Type type string; should fix
      bug #444, 0.9.7..0.9.9 crashes with "Content-Type: type=
       - attachments."

ChangeLog.claws
configure.ac
src/compose.c
src/mimeview.c
src/procmime.c
src/procmime.h
src/textview.c

index 9e714d5..8571415 100644 (file)
@@ -1,3 +1,14 @@
+2004-02-26 [alfons]    0.9.9claws32
+
+       * src/procmime.[ch]
+         src/compose.c
+         src/mimeview.c
+         src/textview.c
+               use/add procmime_get_content_type_str() as a safe wrapper
+               for returning a Content-Type type string; should fix 
+               bug #444, 0.9.7..0.9.9 crashes with "Content-Type: type= 
+                - attachments."
+
 2004-02-26 [thorsten]  0.9.9claws31
 
        * src/mimeview.c
index 3753efd..e2802f1 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=9
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=31
+EXTRA_VERSION=32
 if test $EXTRA_VERSION -eq 0; then
     VERSION=${MAJOR_VERSION}.${MINOR_VERSION}.${MICRO_VERSION}claws
 else
index a784726..aaa131f 100644 (file)
@@ -2310,7 +2310,7 @@ static void compose_attach_parts(Compose *compose, MsgInfo *msginfo)
                else {
                        gchar *content_type;
 
-                       content_type = g_strdup_printf("%s/%s", procmime_get_type_str(child->type), child->subtype);
+                       content_type = procmime_get_content_type_str(child->type, child->subtype);
                        partname = procmime_mimeinfo_get_parameter(child, "name");
                        if (partname == NULL)
                                partname = "";
index 798f797..12d6819 100644 (file)
@@ -542,7 +542,7 @@ static MimeViewer *get_viewer_for_mimeinfo(MimeView *mimeview, MimeInfo *partinf
                if (filename != NULL)
                        content_type = procmime_get_mime_type(filename);
        } else {
-               content_type = g_strdup_printf("%s/%s", procmime_get_type_str(partinfo->type), partinfo->subtype);
+               content_type = procmime_get_content_type_str(partinfo->type, partinfo->subtype);
        }
 
        if (content_type != NULL) {
@@ -1228,7 +1228,7 @@ static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo,
        } else {
                gchar *content_type;
                
-               content_type = g_strdup_printf("%s/%s", procmime_get_type_str(partinfo->type), partinfo->subtype);
+               content_type = procmime_get_content_type_str(partinfo->type, partinfo->subtype);
                g_snprintf(m_buf, sizeof(m_buf), mime_cmdline,
                           content_type, "%s");
                g_free(content_type);
@@ -1581,7 +1581,8 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo)
        GtkWidget *vbox;
        GtkWidget *button;
        gchar *tip;
-       const gchar *desc = NULL;
+       const gchar *desc = NULL; 
+       gchar *content_type;
        StockPixmap stockp;
        
        vbox = mimeview->icon_vbox;
@@ -1631,16 +1632,17 @@ static void icon_list_append_icon (MimeView *mimeview, MimeInfo *mimeinfo)
                        desc = get_part_name(mimeinfo);
        }
 
+       content_type = procmime_get_content_type_str(mimeinfo->type,
+                                                    mimeinfo->subtype);
+
        if (desc && *desc)
-               tip = g_strdup_printf("%s\n%s/%s\n%s", desc,
-                               procmime_get_type_str(mimeinfo->type),
-                               mimeinfo->subtype, 
-                               to_human_readable(mimeinfo->length));
+               tip = g_strdup_printf("%s\n%s\n%s", desc, content_type, 
+                                     to_human_readable(mimeinfo->length));
        else            
-               tip = g_strdup_printf("%s/%s\n%s",
-                               procmime_get_type_str(mimeinfo->type),
-                               mimeinfo->subtype, 
-                               to_human_readable(mimeinfo->length));
+               tip = g_strdup_printf("%s\n%s", content_type,
+                                     to_human_readable(mimeinfo->length));
+       
+       g_free(content_type);
 
        gtk_tooltips_set_tip(mimeview->tooltips, button, tip, NULL);
        g_free(tip);
index 3489a01..41aaf79 100644 (file)
@@ -496,8 +496,8 @@ FILE *procmime_get_text_content(MimeInfo *mimeinfo)
 
        renderer = NULL;
 
-       content_type = g_strdup_printf("%s/%s", procmime_get_type_str(mimeinfo->type),
-               mimeinfo->subtype);
+       content_type = procmime_get_content_type_str(mimeinfo->type,
+                                                    mimeinfo->subtype);
        for (cur = renderer_list ; cur != NULL ; cur = cur->next) {
                struct ContentRenderer * cr;
 
@@ -944,6 +944,21 @@ const gchar *procmime_get_type_str(MimeMediaType type)
        return NULL;
 }
 
+/*!
+ *\brief       Safe wrapper for content type string.
+ *
+ *\return      const gchar * Pointer to content type string. 
+ */
+gchar *procmime_get_content_type_str(MimeMediaType type,
+                                          const char *subtype)
+{
+       const gchar *type_str = NULL;
+
+       if (subtype == NULL || !(type_str = procmime_get_type_str(type)))
+               return g_strdup("unknown");
+       return g_strdup_printf("%s/%s", type_str, subtype);
+}
+
 void procmime_parse_mimepart(MimeInfo *parent,
                             gchar *content_type,
                             gchar *content_encoding,
index c9e97f4..84f684d 100644 (file)
@@ -192,6 +192,8 @@ const gchar *procmime_get_encoding_str              (EncodingType    encoding);
 MimeInfo *procmime_scan_file                   (gchar          *filename);
 MimeInfo *procmime_scan_queue_file             (gchar          *filename);
 const gchar *procmime_get_type_str             (MimeMediaType   type);
+gchar *procmime_get_content_type_str           (MimeMediaType   type,
+                                                const gchar    *subtype);
 
 void renderer_read_config(void);
 void renderer_write_config(void);
index 3e9ef44..aac21cf 100644 (file)
@@ -428,6 +428,7 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo)
        const gchar *charset = NULL;
        GPtrArray *headers = NULL;
        const gchar *name;
+       gchar *content_type;
 
        g_return_if_fail(mimeinfo != NULL);
 
@@ -454,17 +455,18 @@ static void textview_add_part(TextView *textview, MimeInfo *mimeinfo)
        gtk_stext_freeze(text);
 
        name = procmime_mimeinfo_get_parameter(mimeinfo, "filename");
+       content_type = procmime_get_content_type_str(mimeinfo->type,
+                                                    mimeinfo->subtype);
        if (name == NULL)
                name = procmime_mimeinfo_get_parameter(mimeinfo, "name");
        if (name != NULL)
-               g_snprintf(buf, sizeof(buf), "\n[%s  %s/%s (%d bytes)]\n",
-                          name,
-                          procmime_get_type_str(mimeinfo->type),
-                          mimeinfo->subtype, mimeinfo->length);
+               g_snprintf(buf, sizeof(buf), "\n[%s  %s (%d bytes)]\n",
+                          name, content_type, mimeinfo->length);
        else
-               g_snprintf(buf, sizeof(buf), "\n[%s/%s (%d bytes)]\n",
-                          procmime_get_type_str(mimeinfo->type),
-                          mimeinfo->subtype, mimeinfo->length);
+               g_snprintf(buf, sizeof(buf), "\n[%s (%d bytes)]\n",
+                          content_type, mimeinfo->length);
+
+       g_free(content_type);                      
 
        if (mimeinfo->type != MIMETYPE_TEXT) {
                gtk_stext_insert(text, NULL, NULL, NULL, buf, -1);