[gmime] Fixed g_mime_header_set_value()
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime] Fixed g_mime_header_set_value()
- Date: Thu, 16 Mar 2017 22:29:27 +0000 (UTC)
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]