Index: icalattach.c =================================================================== --- icalattach.c (revision 902) +++ icalattach.c (working copy) @@ -67,6 +67,7 @@ icalattach_new_from_data (unsigned char void *free_fn_data) { icalattach *attach; + char *data_copy; icalerror_check_arg_rz ((data != NULL), "data"); @@ -75,9 +76,15 @@ icalattach_new_from_data (unsigned char return NULL; } + if ((data_copy = strdup (data)) == NULL) { + free (attach); + errno = ENOMEM; + return NULL; + } + attach->refcount = 1; attach->is_url = 0; - attach->u.data.data = data; + attach->u.data.data = data_copy; attach->u.data.free_fn = free_fn; attach->u.data.free_fn_data = free_fn_data; @@ -104,10 +111,15 @@ icalattach_unref (icalattach *attach) if (attach->refcount != 0) return; - if (attach->is_url) + if (attach->is_url) { free (attach->u.url.url); - else if (attach->u.data.free_fn) + } else { + free (attach->u.data.data); +/* unused for now + if (attach->u.data.free_fn_data) (* attach->u.data.free_fn) (attach->u.data.data, attach->u.data.free_fn_data); +*/ + } free (attach); }