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 f42181dd4b23e7d4559f7a30b65af86522ceeeff..1fc0910db920d64aa7f56931fb44d1803c692fa7 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 ddedbda6cc65f8332a74e9fba238c9b6beeb5923..d084f80a7839661a56d8123e6cf1d6ab5f4dff6d 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 c884899cede6ecdd0ff38482cae4ac01e52ea195..47eb188b1dfdaef70d9a807da058f07092f3321f 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 28374a361066f7189febffa31f9b63ee9a05c613..352e901e3108ddac581122cdd52c1de02a57c6d4 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 f37c0e907a704288ac9ab380775e5c4b253c9b3e..3df534271614fd7c7a92d63a5d5acad791d14f49 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 e4e464f4dec2ac260c6ec4ff8cea7cb101bf3718..e0d2873b6e1365f08fc238b8b1a6855ee7b3cae4 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 2744fc3507bc9509d35efdc771841c7f41e2c1ab..dbde331a79956400f10e692776a8cec20adb01c0 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 2ce32f35dd944458258318504c9bec5de938771a..b34e5899bc4de8fd2d9dddaef00eb3a2f3648a47 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 6251918f27c63ae652d264e5e290be9a74ee8e32..c4d0d85abb240b1627bf53c32fa202418b860467 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 b723086f9c909b3dc18d2bfe7d1875a15658dcfa..c027ee99674d093e545f3729eaf980ba28589872 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 519673b91d1b9ca67270c3ae830be97ee5897d25..2d7092adb7f5d123b599a76d417767ae99470a5a 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 b7844140123e85fa6579a1d48262b41855e1f84c..f3ba2a2e3c2aed8c741cd8cd09dbce149ef39bf6 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 4a04380a56f61737fac9d7cf24a34725e7ba534b..c7d6702b3733f4ed2f26f1ede68263a12872689b 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 a848a898b821b189ceb23fd07dc8a9ddff7f63bf..855e24be3a5287ff5990a5a8e7ef1771dd057f17 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 9c07e792be19c7a0a18ea9b34e30db5d05005c2b..9d3c96d0cd520436948ec2f28bbd9ad8bb800212 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 b1a3b98a6fc623106ea53b27196b786c8c1f1604..6532ff2e8f0e875cab7dbb008296fb4609779225 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 9306514db4ae25c47fe5594a9e439b8667a143b8..950ec0237df745bfb3e02f46421fa218cd1e0fbe 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 731a5d575903248258b51c549eed1ae53fda1913..84e71a9cdda91168a1d86550f73e526d24730bca 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 4e011e112e950abde743551e2c70d6dd06abe66a..6fd438759817d7ffed8a74ca39df173d91f0889e 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 e08d3b247970c80baa130f75d743854741517fe7..88a37fd8080eb5aafd995eec09c981ead09bec75 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;\
 }\