From e72d26e92357a15163457a3f5af479ce53aaf5b3 Mon Sep 17 00:00:00 2001 From: Colin Leroy Date: Fri, 13 Nov 2015 11:47:09 +0100 Subject: [PATCH] Wow. Such data, so leak, very unfreed --- src/plugins/archive/archiver_gtk.c | 8 +- src/plugins/archive/libarchive_archive.c | 3 +- src/plugins/libravatar/libravatar_missing.c | 3 +- src/plugins/mailmbox/mailimf.c | 85 ++++++++++--------- src/plugins/mailmbox/mailmbox.c | 2 +- src/plugins/python/python-hooks.c | 27 +++++- src/plugins/python/python-hooks.h | 1 + src/plugins/python/python_plugin.c | 2 + src/plugins/smime/smime.c | 2 + .../vcalendar/libical/libical/icalcomponent.c | 8 +- .../libical/libical/icalderivedvalue.c.in | 4 +- .../vcalendar/libical/libical/icalmime.c | 2 + .../vcalendar/libical/libical/icalparameter.c | 6 +- .../vcalendar/libical/libical/icalproperty.c | 19 +++-- .../vcalendar/libical/libical/icalrecur.c | 19 +++-- .../vcalendar/libical/libical/icaltime.c | 1 + .../vcalendar/libical/libical/icalvalue.c | 2 + src/plugins/vcalendar/libical/libical/sspm.c | 5 +- .../libical/scripts/mkderivedproperties.pl | 8 +- .../libical/scripts/mkderivedvalues.pl | 3 +- 20 files changed, 136 insertions(+), 74 deletions(-) diff --git a/src/plugins/archive/archiver_gtk.c b/src/plugins/archive/archiver_gtk.c index f42181dd4..1fc0910db 100644 --- a/src/plugins/archive/archiver_gtk.c +++ b/src/plugins/archive/archiver_gtk.c @@ -284,12 +284,16 @@ static void create_md5sum(const gchar* file, const gchar* md5_file) { gchar* md5sum = malloc(33); debug_print("Creating md5sum file: %s\n", md5_file); - if (md5_hex_digest_file(md5sum, (const unsigned char *) file) == -1) + if (md5_hex_digest_file(md5sum, (const unsigned char *) file) == -1) { + free(md5sum); return; + } debug_print("md5sum: %s\n", md5sum); if ((fd = - open(md5_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)) == -1) + open(md5_file, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR)) == -1) { + free(md5sum); return; + } text = g_strrstr_len(file, strlen(file), "/"); if (text) { text++; diff --git a/src/plugins/archive/libarchive_archive.c b/src/plugins/archive/libarchive_archive.c index ddedbda6c..d084f80a7 100644 --- a/src/plugins/archive/libarchive_archive.c +++ b/src/plugins/archive/libarchive_archive.c @@ -349,7 +349,7 @@ static int archive_copy_data(struct archive* in, struct archive* out) { #endif void archive_add_file(gchar* path) { - struct file_info* file = archive_new_file_info(); + struct file_info* file; gchar* filename = NULL; g_return_if_fail(path != NULL); @@ -363,6 +363,7 @@ void archive_add_file(gchar* path) { g_return_if_fail(filename != NULL); filename++; + file = archive_new_file_info(); file->name = g_strdup(filename); file->path = strip_leading_dot_slash(dirname(path)); archive_add_to_list(file); diff --git a/src/plugins/libravatar/libravatar_missing.c b/src/plugins/libravatar/libravatar_missing.c index c884899ce..47eb188b1 100644 --- a/src/plugins/libravatar/libravatar_missing.c +++ b/src/plugins/libravatar/libravatar_missing.c @@ -60,7 +60,8 @@ GHashTable *missing_load_from_file(const gchar *filename) if (value == NULL) { g_warning("cannot allocate memory"); g_hash_table_destroy(table); - return NULL; + table = NULL; + goto close_exit; } *value = (time_t)seen; g_hash_table_insert(table, g_strdup(md5sum), value); diff --git a/src/plugins/mailmbox/mailimf.c b/src/plugins/mailmbox/mailimf.c index 28374a361..352e901e3 100644 --- a/src/plugins/mailmbox/mailimf.c +++ b/src/plugins/mailmbox/mailimf.c @@ -3007,11 +3007,14 @@ static int mailimf_group_parse(const char * message, size_t length, break; case MAILIMF_ERROR_PARSE: r = mailimf_cfws_parse(message, length, &cur_token); - if ((r != MAILIMF_NO_ERROR) && (r != MAILIMF_ERROR_PARSE)) - return r; + if ((r != MAILIMF_NO_ERROR) && (r != MAILIMF_ERROR_PARSE)) { + res = r; + goto free_display_name; + } break; default: - return r; + res = r; + goto free_display_name; } r = mailimf_semi_colon_parse(message, length, &cur_token); @@ -3703,7 +3706,7 @@ mailimf_resent_field_parse(const char * message, size_t length, &resent_date); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_resent; } break; case MAILIMF_RESENT_FIELD_FROM: @@ -3711,7 +3714,7 @@ mailimf_resent_field_parse(const char * message, size_t length, &resent_from); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_resent; } break; case MAILIMF_RESENT_FIELD_SENDER: @@ -3719,7 +3722,7 @@ mailimf_resent_field_parse(const char * message, size_t length, &resent_sender); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_resent; } break; case MAILIMF_RESENT_FIELD_TO: @@ -3727,7 +3730,7 @@ mailimf_resent_field_parse(const char * message, size_t length, &resent_to); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_resent; } break; case MAILIMF_RESENT_FIELD_CC: @@ -3735,7 +3738,7 @@ mailimf_resent_field_parse(const char * message, size_t length, &resent_cc); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_resent; } break; case MAILIMF_RESENT_FIELD_BCC: @@ -3743,7 +3746,7 @@ mailimf_resent_field_parse(const char * message, size_t length, &resent_bcc); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_resent; } break; case MAILIMF_RESENT_FIELD_MSG_ID: @@ -3751,12 +3754,12 @@ mailimf_resent_field_parse(const char * message, size_t length, &resent_msg_id); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_resent; } break; default: res = MAILIMF_ERROR_PARSE; - goto err; + goto free_resent; } resent_field = mailimf_resent_field_new(type, resent_date, @@ -4170,7 +4173,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_FROM: @@ -4183,7 +4186,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_SENDER: @@ -4196,7 +4199,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_REPLY_TO: @@ -4209,7 +4212,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_TO: @@ -4222,7 +4225,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_CC: @@ -4235,7 +4238,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_BCC: @@ -4248,7 +4251,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_MESSAGE_ID: @@ -4261,7 +4264,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_IN_REPLY_TO: @@ -4274,7 +4277,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_REFERENCES: @@ -4287,7 +4290,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_SUBJECT: @@ -4300,7 +4303,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_COMMENTS: @@ -4313,7 +4316,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_KEYWORDS: @@ -4326,7 +4329,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RETURN_PATH: @@ -4339,7 +4342,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RESENT_DATE: @@ -4352,7 +4355,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RESENT_FROM: @@ -4365,7 +4368,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RESENT_SENDER: @@ -4378,7 +4381,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RESENT_TO: @@ -4391,7 +4394,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RESENT_CC: @@ -4404,7 +4407,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RESENT_BCC: @@ -4417,7 +4420,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; case MAILIMF_FIELD_RESENT_MSG_ID: @@ -4430,7 +4433,7 @@ static int mailimf_field_parse(const char * message, size_t length, } else { res = r; - goto err; + goto free_fields; } break; } @@ -4453,7 +4456,7 @@ static int mailimf_field_parse(const char * message, size_t length, subject, comments, keywords, optional_field); if (field == NULL) { res = MAILIMF_ERROR_MEMORY; - goto free_field; + goto free_fields; } * result = field; @@ -4461,7 +4464,7 @@ static int mailimf_field_parse(const char * message, size_t length, return MAILIMF_NO_ERROR; - free_field: + free_fields: if (return_path != NULL) mailimf_return_free(return_path); if (resent_date != NULL) @@ -5451,7 +5454,7 @@ static int mailimf_unstrict_msg_id_parse(const char * message, size_t length, size_t * index, char ** result) { - char * msgid; + char * msgid = NULL; size_t cur_token; int r; @@ -5470,8 +5473,10 @@ static int mailimf_unstrict_msg_id_parse(const char * message, size_t length, return r; r = mailimf_parse_unwanted_msg_id(message, length, &cur_token); - if (r != MAILIMF_NO_ERROR) + if (r != MAILIMF_NO_ERROR) { + free(msgid); return r; + } * result = msgid; * index = cur_token; @@ -6486,7 +6491,7 @@ static int mailimf_path_parse(const char * message, size_t length, r = mailimf_greater_parse(message, length, &cur_token); if (r != MAILIMF_NO_ERROR) { res = r; - goto err; + goto free_addr_spec; } path = mailimf_path_new(addr_spec); @@ -6501,7 +6506,7 @@ static int mailimf_path_parse(const char * message, size_t length, return MAILIMF_NO_ERROR; free_addr_spec: - if (addr_spec == NULL) + if (addr_spec != NULL) mailimf_addr_spec_free(addr_spec); err: return res; @@ -7282,7 +7287,7 @@ static int mailimf_envelope_field_parse(const char * message, size_t length, subject, NULL, NULL, optional_field); if (field == NULL) { res = MAILIMF_ERROR_MEMORY; - goto free_field; + goto free_fields; } * result = field; @@ -7290,7 +7295,7 @@ static int mailimf_envelope_field_parse(const char * message, size_t length, return MAILIMF_NO_ERROR; - free_field: + free_fields: if (orig_date != NULL) mailimf_orig_date_free(orig_date); if (from != NULL) diff --git a/src/plugins/mailmbox/mailmbox.c b/src/plugins/mailmbox/mailmbox.c index f37c0e907..3df534271 100644 --- a/src/plugins/mailmbox/mailmbox.c +++ b/src/plugins/mailmbox/mailmbox.c @@ -1072,7 +1072,7 @@ int claws_mailmbox_copy_msg_list(struct claws_mailmbox_folder * dest_folder, r = claws_mailmbox_append_message_list(dest_folder, append_tab); if (r != MAILMBOX_NO_ERROR) { res = r; - goto src_unlock; + goto free_list; } for(i = 0 ; i < carray_count(append_tab) ; i ++) { diff --git a/src/plugins/python/python-hooks.c b/src/plugins/python/python-hooks.c index e4e464f4d..e0d2873b6 100644 --- a/src/plugins/python/python-hooks.c +++ b/src/plugins/python/python-hooks.c @@ -42,6 +42,7 @@ static gboolean python_enabled = FALSE; +static void *python_dlhandle = NULL; #ifdef ENABLE_PYTHON static GString *captured_stdout = NULL; @@ -135,7 +136,8 @@ parasite_python_init(char **error) } /* This prevents errors such as "undefined symbol: PyExc_ImportError" */ - if (!dlopen(PYTHON_SHARED_LIB, RTLD_NOW | RTLD_GLOBAL)) + python_dlhandle = dlopen(PYTHON_SHARED_LIB, RTLD_NOW | RTLD_GLOBAL); + if (python_dlhandle == NULL) { *error = g_strdup_printf("Parasite: Error on dlopen(): %s\n", dlerror()); return 0; @@ -177,11 +179,17 @@ parasite_python_init(char **error) " def flush(self):\n" " pass\n" "\n" - ) == -1) + ) == -1) { + dlclose(python_dlhandle); + python_dlhandle = NULL; return 0; + } - if (!pygobject_init(-1, -1, -1)) + if (!pygobject_init(-1, -1, -1)) { + dlclose(python_dlhandle); + python_dlhandle = NULL; return 0; + } pygtk = PyImport_ImportModule("gtk"); @@ -212,6 +220,8 @@ parasite_python_init(char **error) } } else { *error = g_strdup("Parasite: Could not import gtk"); + dlclose(python_dlhandle); + python_dlhandle = NULL; return 0; } @@ -220,6 +230,17 @@ parasite_python_init(char **error) return !0; } +void +parasite_python_done(void) +{ +#ifdef ENABLE_PYTHON + if(python_dlhandle != NULL) { + dlclose(python_dlhandle); + python_dlhandle = NULL; + } +#endif +} + void parasite_python_run(const char *command, ParasitePythonLogger stdout_logger, diff --git a/src/plugins/python/python-hooks.h b/src/plugins/python/python-hooks.h index 2744fc350..dbde331a7 100644 --- a/src/plugins/python/python-hooks.h +++ b/src/plugins/python/python-hooks.h @@ -29,6 +29,7 @@ typedef void (*ParasitePythonLogger)(const char *text, gpointer user_data); int parasite_python_init(char **error); +void parasite_python_done(void); void parasite_python_run(const char *command, ParasitePythonLogger stdout_logger, ParasitePythonLogger stderr_logger, diff --git a/src/plugins/python/python_plugin.c b/src/plugins/python/python_plugin.c index 2ce32f35d..b34e5899b 100644 --- a/src/plugins/python/python_plugin.c +++ b/src/plugins/python/python_plugin.c @@ -724,6 +724,8 @@ gboolean plugin_done(void) /* finialize python interpreter */ Py_Finalize(); + parasite_python_done(); + debug_print("Python plugin done and unloaded.\n"); return FALSE; } diff --git a/src/plugins/smime/smime.c b/src/plugins/smime/smime.c index 6251918f2..c4d0d85ab 100644 --- a/src/plugins/smime/smime.c +++ b/src/plugins/smime/smime.c @@ -841,12 +841,14 @@ gboolean smime_encrypt(MimeInfo *mimeinfo, const gchar *encrypt_data) fclose(fp); claws_unlink(tmpfile); g_free(tmpfile); + g_free(enccontent); return FALSE; } if (fclose(fp) == EOF) { FILE_OP_ERROR(tmpfile, "fclose"); claws_unlink(tmpfile); g_free(tmpfile); + g_free(enccontent); return FALSE; } } else { diff --git a/src/plugins/vcalendar/libical/libical/icalcomponent.c b/src/plugins/vcalendar/libical/libical/icalcomponent.c index b723086f9..c027ee996 100644 --- a/src/plugins/vcalendar/libical/libical/icalcomponent.c +++ b/src/plugins/vcalendar/libical/libical/icalcomponent.c @@ -254,9 +254,6 @@ icalcomponent_as_ical_string (icalcomponent* component) const char* kind_string; - buf = icalmemory_new_buffer(buf_size); - buf_ptr = buf; - icalerror_check_arg_rz( (component!=0), "component"); icalerror_check_arg_rz( (kind!=ICAL_NO_COMPONENT), "component kind is ICAL_NO_COMPONENT"); @@ -264,6 +261,9 @@ icalcomponent_as_ical_string (icalcomponent* component) icalerror_check_arg_rz( (kind_string!=0),"Unknown kind of component"); + buf = icalmemory_new_buffer(buf_size); + buf_ptr = buf; + icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:"); icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); @@ -301,7 +301,7 @@ icalcomponent_as_ical_string (icalcomponent* component) icalmemory_append_string(&buf, &buf_ptr, &buf_size, newline); out_buf = icalmemory_tmp_copy(buf); - free(buf); + icalmemory_free_buffer(buf); return out_buf; } diff --git a/src/plugins/vcalendar/libical/libical/icalderivedvalue.c.in b/src/plugins/vcalendar/libical/libical/icalderivedvalue.c.in index 519673b91..2d7092adb 100644 --- a/src/plugins/vcalendar/libical/libical/icalderivedvalue.c.in +++ b/src/plugins/vcalendar/libical/libical/icalderivedvalue.c.in @@ -90,9 +90,9 @@ icalvalue_kind icalvalue_string_to_kind(const char* str) } icalvalue* icalvalue_new_x (const char* v){ - struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_X_VALUE); + struct icalvalue_impl* impl; icalerror_check_arg_rz( (v!=0),"v"); - + impl = icalvalue_new_impl(ICAL_X_VALUE); icalvalue_set_x((icalvalue*)impl,v); return (icalvalue*)impl; } diff --git a/src/plugins/vcalendar/libical/libical/icalmime.c b/src/plugins/vcalendar/libical/libical/icalmime.c index b78441401..f3ba2a2e3 100644 --- a/src/plugins/vcalendar/libical/libical/icalmime.c +++ b/src/plugins/vcalendar/libical/libical/icalmime.c @@ -384,6 +384,8 @@ int icalmime_test(char* (*get_string)(char *s, size_t size, void *d), printf("%s\n",out); + free(out); + return 0; } diff --git a/src/plugins/vcalendar/libical/libical/icalparameter.c b/src/plugins/vcalendar/libical/libical/icalparameter.c index 4a04380a5..c7d6702b3 100644 --- a/src/plugins/vcalendar/libical/libical/icalparameter.c +++ b/src/plugins/vcalendar/libical/libical/icalparameter.c @@ -171,6 +171,7 @@ icalparameter* icalparameter_new_from_string(const char *str) if(eq == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(cpy); return 0; } @@ -182,6 +183,7 @@ icalparameter* icalparameter_new_from_string(const char *str) if(kind == ICAL_NO_PARAMETER){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(cpy); return 0; } @@ -233,6 +235,7 @@ icalparameter_as_ical_string (icalparameter* parameter) kind_string == 0) { icalerror_set_errno(ICAL_BADARG_ERROR); + icalmemory_free_buffer(buf); return 0; } @@ -251,13 +254,14 @@ icalparameter_as_ical_string (icalparameter* parameter) icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); } else { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + icalmemory_free_buffer(buf); return 0; } /* Now, copy the buffer to a tmp_buffer, which is safe to give to the caller without worring about de-allocating it. */ - out_buf = icalmemory_tmp_buffer(strlen(buf)); + out_buf = icalmemory_tmp_buffer(strlen(buf) + 1); strcpy(out_buf, buf); icalmemory_free_buffer(buf); diff --git a/src/plugins/vcalendar/libical/libical/icalproperty.c b/src/plugins/vcalendar/libical/libical/icalproperty.c index a848a898b..855e24be3 100644 --- a/src/plugins/vcalendar/libical/libical/icalproperty.c +++ b/src/plugins/vcalendar/libical/libical/icalproperty.c @@ -176,14 +176,17 @@ icalproperty* icalproperty_new_from_string(char* str) { size_t buf_size = 1024; - char* buf = icalmemory_new_buffer(buf_size); - char* buf_ptr = buf; + char* buf; + char* buf_ptr; icalproperty *prop; icalcomponent *comp; int errors = 0; icalerror_check_arg_rz( (str!=0),"str"); + buf = icalmemory_new_buffer(buf_size); + buf_ptr = buf; + /* Is this a HACK or a crafty reuse of code? */ icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:VCALENDAR\n"); @@ -195,6 +198,7 @@ icalproperty* icalproperty_new_from_string(char* str) if(comp == 0){ icalerror_set_errno(ICAL_PARSE_ERROR); + icalmemory_free_buffer(buf); return 0; } @@ -205,7 +209,7 @@ icalproperty* icalproperty_new_from_string(char* str) icalcomponent_remove_property(comp,prop); icalcomponent_free(comp); - free(buf); + icalmemory_free_buffer(buf); if(errors > 0){ icalproperty_free(prop); @@ -276,8 +280,8 @@ icalproperty_as_ical_string (icalproperty* prop) const char* property_name = 0; size_t buf_size = 1024; - char* buf = icalmemory_new_buffer(buf_size); - char* buf_ptr = buf; + char* buf; + char* buf_ptr; icalvalue* value; char *out_buf; @@ -287,6 +291,8 @@ icalproperty_as_ical_string (icalproperty* prop) icalerror_check_arg_rz( (prop!=0),"prop"); + buf = icalmemory_new_buffer(buf_size); + buf_ptr = buf; /* Append property name */ @@ -762,7 +768,8 @@ char* icalproperty_get_name (icalproperty* prop) if (property_name == 0 ) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - return 0; + icalmemory_free_buffer(buf); + return NULL; } else { /* _append_string will automatically grow the buffer if diff --git a/src/plugins/vcalendar/libical/libical/icalrecur.c b/src/plugins/vcalendar/libical/libical/icalrecur.c index 9c07e792b..9d3c96d0c 100644 --- a/src/plugins/vcalendar/libical/libical/icalrecur.c +++ b/src/plugins/vcalendar/libical/libical/icalrecur.c @@ -798,7 +798,7 @@ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, icalrecur_two_byrule(impl,BY_YEAR_DAY,BY_DAY) ){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - + free(impl); return 0; } @@ -806,8 +806,7 @@ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, if(icalrecur_two_byrule(impl,BY_WEEK_NO,BY_MONTH)){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - - icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(impl); return 0; } @@ -815,8 +814,7 @@ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, if(icalrecur_two_byrule(impl,BY_WEEK_NO,BY_MONTH_DAY)){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - - icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(impl); return 0; } @@ -827,6 +825,7 @@ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, if(freq == ICAL_MONTHLY_RECURRENCE && icalrecur_one_byrule(impl,BY_WEEK_NO)){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(impl); return 0; } @@ -837,6 +836,7 @@ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, if(freq == ICAL_WEEKLY_RECURRENCE && icalrecur_one_byrule(impl,BY_MONTH_DAY )) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(impl); return 0; } @@ -844,6 +844,7 @@ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, if(freq != ICAL_YEARLY_RECURRENCE && icalrecur_one_byrule(impl,BY_YEAR_DAY )) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(impl); return 0; } @@ -957,13 +958,12 @@ icalrecur_iterator* icalrecur_iterator_new(struct icalrecurrencetype rule, if(impl->last.day > days_in_month || impl->last.day == 0){ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + free(impl); return 0; } } - - return impl; } @@ -1787,7 +1787,7 @@ int expand_year_days(struct icalrecur_iterator_impl* impl,short year) short day = (short)GPOINTER_TO_INT(pvl_data(i)); impl->days[days_index++] = day; } - + pvl_free(days); break; } @@ -1857,8 +1857,8 @@ int expand_year_days(struct icalrecur_iterator_impl* impl,short year) } } } - } + pvl_free(days); break; @@ -1887,6 +1887,7 @@ int expand_year_days(struct icalrecur_iterator_impl* impl,short year) } } + pvl_free(days); break; } diff --git a/src/plugins/vcalendar/libical/libical/icaltime.c b/src/plugins/vcalendar/libical/libical/icaltime.c index b1a3b98a6..6532ff2e8 100644 --- a/src/plugins/vcalendar/libical/libical/icaltime.c +++ b/src/plugins/vcalendar/libical/libical/icaltime.c @@ -108,6 +108,7 @@ struct set_tz_save set_tz(const char* tzid) if(new_env_str == 0){ icalerror_set_errno(ICAL_NEWFAILED_ERROR); + free(orig_tzid); return savetz; } diff --git a/src/plugins/vcalendar/libical/libical/icalvalue.c b/src/plugins/vcalendar/libical/libical/icalvalue.c index 9306514db..950ec0237 100644 --- a/src/plugins/vcalendar/libical/libical/icalvalue.c +++ b/src/plugins/vcalendar/libical/libical/icalvalue.c @@ -123,6 +123,7 @@ icalvalue* icalvalue_new_clone(icalvalue* value){ new->data.v_string=icalmemory_strdup(old->data.v_string); if ( new->data.v_string == 0 ) { + icalvalue_free(new); return 0; } @@ -135,6 +136,7 @@ icalvalue* icalvalue_new_clone(icalvalue* value){ new->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); if(new->data.v_recur == 0){ + icalvalue_free(new); return 0; } diff --git a/src/plugins/vcalendar/libical/libical/sspm.c b/src/plugins/vcalendar/libical/libical/sspm.c index 731a5d575..84e71a9cd 100644 --- a/src/plugins/vcalendar/libical/libical/sspm.c +++ b/src/plugins/vcalendar/libical/libical/sspm.c @@ -419,12 +419,14 @@ struct sspm_action_map get_action(struct mime_impl *impl, char* sspm_lowercase(char* str) { char* p = 0; - char* new = sspm_strdup(str); + char* new; if(str ==0){ return 0; } + new = sspm_strdup(str); + for(p = new; *p!=0; p++){ *p = tolower(*p); } @@ -457,6 +459,7 @@ enum sspm_minor_type sspm_find_minor_content_type(char* type) char *p = strchr(ltype,'/'); if (p==0){ + free(ltype); return SSPM_UNKNOWN_MINOR_TYPE; } diff --git a/src/plugins/vcalendar/libical/scripts/mkderivedproperties.pl b/src/plugins/vcalendar/libical/scripts/mkderivedproperties.pl index 4e011e112..6fd438759 100644 --- a/src/plugins/vcalendar/libical/scripts/mkderivedproperties.pl +++ b/src/plugins/vcalendar/libical/scripts/mkderivedproperties.pl @@ -166,13 +166,17 @@ foreach $prop (sort keys %propmap) { print<