[gmime] Fixed g_mime_header_set_value()



commit 6b6801929e53758a40ab44f04d33f21b736e8d5d
Author: Jeffrey Stedfast <jestedfa microsoft com>
Date:   Thu Mar 16 15:19:14 2017 -0400

    Fixed g_mime_header_set_value()
    
    After freeing raw_value, make sure to set it to NULL.

 gmime/gmime-header.c |    3 +-
 tests/test-headers.c |   63 ++++++++++++++++++++++++++++++++++---------------
 2 files changed, 46 insertions(+), 20 deletions(-)
---
diff --git a/gmime/gmime-header.c b/gmime/gmime-header.c
index 59f96b1..4e90183 100644
--- a/gmime/gmime-header.c
+++ b/gmime/gmime-header.c
@@ -194,8 +194,9 @@ g_mime_header_set_value (GMimeHeader *header, const char *value)
        g_return_if_fail (value != NULL);
        
        g_free (header->raw_value);
-       g_free (header->value);
+       header->raw_value = NULL;
        
+       g_free (header->value);
        header->value = g_strdup (value);
        
        g_mime_event_emit (header->changed, NULL);
diff --git a/tests/test-headers.c b/tests/test-headers.c
index 3c03748..f21d18b 100644
--- a/tests/test-headers.c
+++ b/tests/test-headers.c
@@ -223,23 +223,17 @@ test_remove_at (void)
 }
 
 static void
-test_header_sync (void)
+test_content_type_sync (void)
 {
-       GMimeContentDisposition *disposition;
-       InternetAddressList *list;
-       InternetAddress *addr, *ia;
        GMimeHeaderList *headers;
        GMimeContentType *type;
        GMimeParamList *params;
-       GMimeMessage *message;
        GMimeObject *object;
        GMimeHeader *header;
        const char *value;
        GMimePart *part;
        
-       part = g_mime_part_new_with_type ("application", "octet-stream");
-       object = (GMimeObject *) part;
-       
+       object = (GMimeObject *) (part = g_mime_part_new ());
        headers = g_mime_object_get_header_list (object);
        
        testsuite_check ("content-type synchronization");
@@ -283,17 +277,34 @@ test_header_sync (void)
                        throw (exception_new ("content-type header had unexpected value after setting 
params"));
                
                /* let's try this in reverse... set the header value and make sure GMimeContentType gets 
updated */
-               //header = g_mime_header_list_get_header (headers, 0);
-               //g_mime_header_set_value (header, "text/html; charset=utf-8");
-               //type = g_mime_object_get_content_type (object);
-               //if (!g_mime_content_type_is_type (type, "text", "html"))
-               //      throw (exception_new ("GMimeContentType object was not updated"));
+               header = g_mime_header_list_get_header_at (headers, 0);
+               g_mime_header_set_value (header, "text/html; charset=utf-8");
+               type = g_mime_object_get_content_type (object);
+               if (!g_mime_content_type_is_type (type, "text", "html"))
+                       throw (exception_new ("GMimeContentType object was not updated"));
                
                testsuite_check_passed ();
        } catch (ex) {
                testsuite_check_failed ("content-type header not synchronized: %s", ex->message);
        } finally;
        
+       g_object_unref (part);
+}
+
+static void
+test_disposition_sync (void)
+{
+       GMimeContentDisposition *disposition;
+       GMimeHeaderList *headers;
+       GMimeParamList *params;
+       GMimeObject *object;
+       GMimeHeader *header;
+       const char *value;
+       GMimePart *part;
+       
+       object = (GMimeObject *) (part = g_mime_part_new ());
+       headers = g_mime_object_get_header_list (object);
+       
        testsuite_check ("content-disposition synchronization");
        try {
                g_mime_object_set_disposition (object, "attachment");
@@ -330,11 +341,11 @@ test_header_sync (void)
                        throw (exception_new ("content-disposition header had unexpected value after setting 
params"));
                
                /* let's try this in reverse... set the header value and make sure GMimeContentDisposition 
gets updated */
-               //header = g_mime_header_list_get_header (headers, 1);
-               //g_mime_header_set_value (header, "attachment; filename=xyz");
-               //disposition = g_mime_object_get_content_disposition (object);
-               //if (!g_mime_content_disposition_is_attachment (disposition))
-               //      throw (exception_new ("GMimeContentDisposition object was not updated"));
+               header = g_mime_header_list_get_header_at (headers, 1);
+               g_mime_header_set_value (header, "attachment; filename=xyz");
+               disposition = g_mime_object_get_content_disposition (object);
+               if (!g_mime_content_disposition_is_attachment (disposition))
+                       throw (exception_new ("GMimeContentDisposition object was not updated"));
                
                testsuite_check_passed ();
        } catch (ex) {
@@ -342,6 +353,18 @@ test_header_sync (void)
        } finally;
        
        g_object_unref (part);
+}
+
+static void
+test_address_sync (void)
+{
+       InternetAddress *addr, *ia;
+       InternetAddressList *list;
+       GMimeHeaderList *headers;
+       GMimeParamList *params;
+       GMimeMessage *message;
+       GMimeObject *object;
+       const char *value;
        
        message = g_mime_message_new (TRUE);
        list = g_mime_message_get_addresses (message, GMIME_ADDRESS_TYPE_TO);
@@ -439,7 +462,9 @@ int main (int argc, char **argv)
        testsuite_end ();
        
        testsuite_start ("header synchronization");
-       test_header_sync ();
+       test_content_type_sync ();
+       test_disposition_sync ();
+       test_address_sync ();
        testsuite_end ();
        
        g_mime_shutdown ();


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