Wow. Such data, so leak, very unfreed
authorColin Leroy <colin@colino.net>
Fri, 13 Nov 2015 10:47:09 +0000 (11:47 +0100)
committerColin Leroy <colin@colino.net>
Fri, 13 Nov 2015 10:47:09 +0000 (11:47 +0100)
20 files changed:
src/plugins/archive/archiver_gtk.c
src/plugins/archive/libarchive_archive.c
src/plugins/libravatar/libravatar_missing.c
src/plugins/mailmbox/mailimf.c
src/plugins/mailmbox/mailmbox.c
src/plugins/python/python-hooks.c
src/plugins/python/python-hooks.h
src/plugins/python/python_plugin.c
src/plugins/smime/smime.c
src/plugins/vcalendar/libical/libical/icalcomponent.c
src/plugins/vcalendar/libical/libical/icalderivedvalue.c.in
src/plugins/vcalendar/libical/libical/icalmime.c
src/plugins/vcalendar/libical/libical/icalparameter.c
src/plugins/vcalendar/libical/libical/icalproperty.c
src/plugins/vcalendar/libical/libical/icalrecur.c
src/plugins/vcalendar/libical/libical/icaltime.c
src/plugins/vcalendar/libical/libical/icalvalue.c
src/plugins/vcalendar/libical/libical/sspm.c
src/plugins/vcalendar/libical/scripts/mkderivedproperties.pl
src/plugins/vcalendar/libical/scripts/mkderivedvalues.pl

index f42181d..1fc0910 100644 (file)
@@ -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++;
index ddedbda..d084f80 100644 (file)
@@ -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);
index c884899..47eb188 100644 (file)
@@ -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);
index 28374a3..352e901 100644 (file)
@@ -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)
index f37c0e9..3df5342 100644 (file)
@@ -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 ++) {
index e4e464f..e0d2873 100644 (file)
@@ -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,
index 2744fc3..dbde331 100644 (file)
@@ -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,
index 2ce32f3..b34e589 100644 (file)
@@ -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;
 }
index 6251918..c4d0d85 100644 (file)
@@ -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 {
index b723086..c027ee9 100644 (file)
@@ -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;
 }
index 519673b..2d7092a 100644 (file)
@@ -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;
 }
index b784414..f3ba2a2 100644 (file)
@@ -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;
 
 }
index 4a04380..c7d6702 100644 (file)
@@ -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);
index a848a89..855e24b 100644 (file)
@@ -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
index 9c07e79..9d3c96d 100644 (file)
@@ -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;
     }
 
index b1a3b98..6532ff2 100644 (file)
@@ -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;
     }
     
index 9306514..950ec02 100644 (file)
@@ -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;
                }
 
index 731a5d5..84e71a9 100644 (file)
@@ -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; 
     }
 
index 4e011e1..6fd4387 100644 (file)
@@ -166,13 +166,17 @@ foreach $prop (sort keys %propmap) {
  print<<EOM;
 /* $prop */
 icalproperty* icalproperty_new_${lc}($type v) {
-   struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY);   $pointer_check
+   struct icalproperty_impl *impl;
+   $pointer_check
+   impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY);
    icalproperty_set_${lc}((icalproperty*)impl,v);
    return (icalproperty*)impl;
 }
 icalproperty* icalproperty_vanew_${lc}($type v, ...){
    va_list args;
-   struct icalproperty_impl *impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY);   $pointer_check
+   struct icalproperty_impl *impl;
+   $pointer_check
+   impl = icalproperty_new_impl(ICAL_${uc}_PROPERTY);
    icalproperty_set_${lc}((icalproperty*)impl,v);
    va_start(args,v);
    icalproperty_add_parameters(impl, args);
index e08d3b2..88a37fd 100644 (file)
@@ -176,8 +176,9 @@ foreach $value  (keys %h) {
     
     print "\n\n\
 icalvalue* icalvalue_new_${lc} ($type v){\
-   struct icalvalue_impl* impl = icalvalue_new_impl(ICAL_${uc}_VALUE);\
+   struct icalvalue_impl* impl;\
    $pointer_check\
+   impl = icalvalue_new_impl(ICAL_${uc}_VALUE);\
    icalvalue_set_${lc}((icalvalue*)impl,v);\
    return (icalvalue*)impl;\
 }\