On 06/07/2011 03:19 PM, Ivana Hutarova Varekova wrote:
> fix return value checks in load_list functions
> 
> Changelog:
> * thanks jsafrane free proper list structure properly
> 
> Signed-off-by: Ivana Hutarova Varekova <varek...@redhat.com>

Acked-By: Jan Safranek <jsafr...@redhat.com>
& merged and pushed, thanks

> ---
> 
>  src/tools/cgsnapshot.c |   27 +++++++++++++++++++++++----
>  1 files changed, 23 insertions(+), 4 deletions(-)
> 
> diff --git a/src/tools/cgsnapshot.c b/src/tools/cgsnapshot.c
> index 0ff7435..fe7496d 100644
> --- a/src/tools/cgsnapshot.c
> +++ b/src/tools/cgsnapshot.c
> @@ -101,7 +101,7 @@ int load_list(char *filename, struct black_list_type 
> **p_list)
>               return 1;
>       }
>  
> -     /* go through the all configuration file and search the line */
> +     /* go through the configuration file and search the line */
>       while (fgets(buf, FILENAME_MAX, fw) != NULL) {
>               buf[FILENAME_MAX-1] = '\0';
>               i = 0;
> @@ -118,13 +118,21 @@ int load_list(char *filename, struct black_list_type 
> **p_list)
>               if (new == NULL) {
>                       fprintf(stderr, "ERROR: Memory allocation problem "
>                               "(%s)\n", strerror(errno));
> -                     *p_list = NULL;
> -                     return 1;
> +                     ret = 1;
> +                     goto err;
>               }
>  
>               ret = sscanf(buf, "%s", name);
> -             new->name = strdup(name);
> +             if (ret == 0)
> +                     continue;
>  
> +             new->name = strdup(name);
> +             if (new->name == NULL) {
> +                     fprintf(stderr, "ERROR: Memory allocation problem "
> +                             "(%s)\n", strerror(errno));
> +                     ret = 1;
> +                     goto err;
> +             }
>               new->next = NULL;
>  
>               /* update the variables list */
> @@ -140,6 +148,17 @@ int load_list(char *filename, struct black_list_type 
> **p_list)
>       fclose(fw);
>       *p_list = start;
>       return 0;
> +
> +err:
> +     new = start;
> +     while (new != NULL) {
> +             end = new->next;
> +             free(new->name);
> +             free(new);
> +             new = end;
> +     }
> +     *p_list = NULL;
> +     return ret;
>  }
>  
>  /* free list structure */
> 
> 
> ------------------------------------------------------------------------------
> EditLive Enterprise is the world's most technically advanced content
> authoring tool. Experience the power of Track Changes, Inline Image
> Editing and ensure content is compliant with Accessibility Checking.
> http://p.sf.net/sfu/ephox-dev2dev
> _______________________________________________
> Libcg-devel mailing list
> Libcg-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/libcg-devel


------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to