- removed some memory leaks
authorJiří Filipovič <fila@ics.muni.cz>
Tue, 6 May 2008 14:01:40 +0000 (14:01 +0000)
committerJiří Filipovič <fila@ics.muni.cz>
Tue, 6 May 2008 14:01:40 +0000 (14:01 +0000)
- fixed bug (use data after free)

org.glite.jp.primary/src/attrs.c
org.glite.jp.primary/src/feed.c
org.glite.jp.primary/src/new_ftp_backend.c

index d4cc5b5..bea33c7 100644 (file)
@@ -151,6 +151,10 @@ static void process_files(glite_jp_context_t ctx, const char *job, glite_jp_attr
                keep_err = ctx->error; ctx->error = NULL;
                if (keep_err) { ctx->error = keep_err; keep_err = NULL; }
        }
+
+       for (n = 0; n < nnames; n++)
+               free(names[n]);
+       free(names);
 }
 
 int glite_jpps_get_attrs(glite_jp_context_t ctx,const char *job,char **attr,int nattr,glite_jp_attrval_t **attrs_out)
@@ -228,9 +232,6 @@ int glite_jpps_get_attrs(glite_jp_context_t ctx,const char *job,char **attr,int
 
        free(meta); meta = NULL;
 
-       for (i = 0; i < nout; i++)
-                printf("%s\n", out[i].value);
-
        if (nout) {
                *attrs_out = out;
                err = 0;
index c5e9e23..af91285 100644 (file)
@@ -720,6 +720,7 @@ static int run_feed_deferred(glite_jp_context_t ctx,void *feed)
        else meta[1] = NULL;
 
        ret = glite_jppsbe_query(ctx,f->meta_qry,meta,f,feed_query_callback);
+       free(meta);
        if (ret == 0) ret = drain_feed(ctx,f,1);
        else if (ret == ENOENT) ret = 0; 
        else drop_jobs(f);
@@ -775,7 +776,7 @@ int glite_jpps_register_feed(
        char **feed_id,
        time_t *expires)
 {
-       struct jpfeed   *f;
+       struct jpfeed   *f = NULL;
 
        if (!*feed_id) *feed_id = generate_feedid();
        time(expires); *expires += FEED_TTL;
index 902b43d..7eee0fe 100644 (file)
@@ -1005,7 +1005,7 @@ int glite_jppsbe_open_file(
        if (handle->fd_gz == NULL){
                gzerror(((fhandle)handle)->fd_gz, &(err.code));
                 err.desc = "Cannot open requested file";
-                free(handle);
+                free(handle); handle = NULL;
                 error = 1;
                 goto error_out;
         }
@@ -1093,7 +1093,8 @@ int glite_jppsbe_close_file(
        }
 
 error_out:
-       free(handle);
+       free(((fhandle)handle)->filedata);
+       free(handle); handle=NULL;
        if (err.code) {
                return glite_jp_stack_error(ctx,&err);
        } else { 
@@ -1858,6 +1859,7 @@ int glite_jppsbe_refresh_feed(
 
 error_out:
         free(stmt);
+       free(e);
         if (err.code)
                 return glite_jp_stack_error(ctx,&err);
         else
@@ -1944,6 +1946,7 @@ int glite_jppsbe_read_feeds(
                glite_jp_stack_error(ctx,&err);
                goto cleanup;
        }
+       free(stmt);
 
        while ((rows = glite_jp_db_FetchRow(ctx,q,sizeof(res)/sizeof(res[0]),NULL, res)) > 0) {
                struct jpfeed *f = calloc(1,sizeof *f);
@@ -2075,12 +2078,22 @@ int glite_jppsbe_read_tag(
                return err.code;
        }
 
+       int i;
+       for (i=0; i < h->n; i++){
+               free(h->tags[i].name);
+               free(h->tags[i].value);
+       }
+       free(h->tags);
+
        if (glite_jppsbe_close_file(ctx,h->bhandle))
         {
                 err.code = EIO;
                 err.desc = "cannot close tags file";
+               free(h);
                 return glite_jp_stack_error(ctx,&err);
         }
+
+       free(h);
        
        return 0;
 }