From 0538360fe771015f1719e7c5307589f3df9b4260 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ji=C5=99=C3=AD=20Filipovi=C4=8D?= Date: Tue, 6 May 2008 14:01:40 +0000 Subject: [PATCH] - removed some memory leaks - fixed bug (use data after free) --- org.glite.jp.primary/src/attrs.c | 7 ++++--- org.glite.jp.primary/src/feed.c | 3 ++- org.glite.jp.primary/src/new_ftp_backend.c | 17 +++++++++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/org.glite.jp.primary/src/attrs.c b/org.glite.jp.primary/src/attrs.c index d4cc5b5..bea33c7 100644 --- a/org.glite.jp.primary/src/attrs.c +++ b/org.glite.jp.primary/src/attrs.c @@ -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; diff --git a/org.glite.jp.primary/src/feed.c b/org.glite.jp.primary/src/feed.c index c5e9e23..af91285 100644 --- a/org.glite.jp.primary/src/feed.c +++ b/org.glite.jp.primary/src/feed.c @@ -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; diff --git a/org.glite.jp.primary/src/new_ftp_backend.c b/org.glite.jp.primary/src/new_ftp_backend.c index 902b43d..7eee0fe 100644 --- a/org.glite.jp.primary/src/new_ftp_backend.c +++ b/org.glite.jp.primary/src/new_ftp_backend.c @@ -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; } -- 1.8.2.3