Index: icalvalue.c =================================================================== --- icalvalue.c (revision 887) +++ icalvalue.c (working copy) @@ -948,24 +948,29 @@ static char* icalvalue_duration_as_ical_ void print_time_to_string(char* str, const struct icaltimetype *data) { char temp[20]; + str[0] = '\0'; + if (data != 0) { if (icaltime_is_utc(*data)){ snprintf(temp,sizeof(temp),"%02d%02d%02dZ",data->hour,data->minute,data->second); + strncat(str,temp,7); } else { snprintf(temp,sizeof(temp),"%02d%02d%02d",data->hour,data->minute,data->second); + strncat(str,temp,6); + } } - - strcat(str,temp); } void print_date_to_string(char* str, const struct icaltimetype *data) { char temp[20]; + str[0] = '\0'; + if (data != 0) { snprintf(temp,sizeof(temp),"%04d%02d%02d",data->year,data->month,data->day); - - strcat(str,temp); + strncat(str,temp,8); + } } static char* icalvalue_date_as_ical_string_r(const icalvalue* value) { @@ -977,7 +982,7 @@ static char* icalvalue_date_as_ical_stri str = (char*)icalmemory_new_buffer(9); - str[0] = 0; + str[0] = '\0'; print_date_to_string(str,&data); return str; @@ -985,10 +990,17 @@ static char* icalvalue_date_as_ical_stri void print_datetime_to_string(char* str, const struct icaltimetype *data) { + str[0] = '\0'; + if (data != 0) { print_date_to_string(str,data); if ( !data->is_date ) { - strcat(str,"T"); - print_time_to_string(str,data); + strncat(str,"T",19); + char *tbuf = (char*)icalmemory_new_buffer(8); + tbuf[0] = '\0'; + print_time_to_string(tbuf,data); + strncat(str,tbuf,19); + free(tbuf); + } } } @@ -1013,7 +1025,6 @@ static char* icalvalue_datetime_as_ical_ str = (char*)icalmemory_new_buffer(20); str[0] = 0; - print_datetime_to_string(str,&data); return str;