Re: [PATCH v4 2/2] test: Fix issues reported by cppcheck static analysis tool

Bryce Harrington <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <[email protected]>
On Mon, Aug 25, 2014 at 09:28:40AM +0530, Ravi Nanjundappa wrote:
> cppcheck analysis tool reports the following issues when run on the
> latest Cairo source.
> 
> $ grep "(error)"  cppcheck_error_log.txt
> [test/pdf-mime-data.c:58]: (error) Possible null pointer dereference: file - otherwise it is redundant to check if file is null at line 53
> [test/pdf-mime-data.c:75]: (error) Resource leak: fp
> $
> 
> The proposed changes fixes the above issues.

Looks good, merged both patches in series.
 
> And also it does some refactoring to print the appropriate error messages
> for each error condition in read_file() function and also to free the allocated
> data buffer.
> 
> Signed-off-by: Ravi Nanjundappa <[email protected]>
> Reviewed-by: Chris Wilson <[email protected]>
> ---
>  test/pdf-mime-data.c |   25 ++++++++++++++-----------
>  1 file changed, 14 insertions(+), 11 deletions(-)
> 
> diff --git a/test/pdf-mime-data.c b/test/pdf-mime-data.c
> index e2c529e..fd5af1f 100644
> --- a/test/pdf-mime-data.c
> +++ b/test/pdf-mime-data.c
> @@ -50,7 +50,7 @@ read_file (const cairo_test_context_t *ctx,
>      FILE *fp;
>  
>      fp = fopen (file, "rb");
> -    if (file == NULL) {
> +    if (fp == NULL) {
>  	char filename[4096];
>  
>  	/* try again with srcdir */
> @@ -61,8 +61,11 @@ read_file (const cairo_test_context_t *ctx,
>      if (fp == NULL) {
>  	switch (errno) {
>  	case ENOMEM:
> +	    cairo_test_log (ctx, "Could not create file handle for %s due to \
> +				lack of memory\n", file);
>  	    return CAIRO_TEST_NO_MEMORY;
>  	default:
> +	    cairo_test_log (ctx, "Could not get the file handle for %s\n", file);
>  	    return CAIRO_TEST_FAILURE;
>  	}
>      }
> @@ -71,11 +74,19 @@ read_file (const cairo_test_context_t *ctx,
>      *len = ftell(fp);
>      fseek (fp, 0, SEEK_SET);
>      *data = malloc (*len);
> -    if (*data == NULL)
> +    if (*data == NULL) {
> +	fclose(fp);
> +	cairo_test_log (ctx, "Could not allocate memory for buffer to read \
> +				from file %s\n", file);
>  	return CAIRO_TEST_NO_MEMORY;
> +    }
>  
> -    if (fread(*data, *len, 1, fp) != 1)
> +    if (fread(*data, *len, 1, fp) != 1) {
> +	free (data);
> +	fclose(fp);
> +	cairo_test_log (ctx, "Could not read data from file %s\n", file);
>  	return CAIRO_TEST_FAILURE;
> +    }
>  
>      fclose(fp);
>      return CAIRO_TEST_SUCCESS;
> @@ -104,8 +115,6 @@ preamble (cairo_test_context_t *ctx)
>      image = cairo_image_surface_create_from_png (IMAGE_FILE ".png");
>      test_status = read_file (ctx, IMAGE_FILE ".jpg", &data, &len);
>      if (test_status) {
> -	cairo_test_log (ctx, "Could not read input jpeg file %s\n", IMAGE_FILE ".jpg");
> -	free(data);
>  	return test_status;
>      }
>  
> @@ -149,17 +158,11 @@ preamble (cairo_test_context_t *ctx)
>  
>      test_status = read_file (ctx, IMAGE_FILE ".jpg", &data, &len);
>      if (test_status) {
> -	cairo_test_log (ctx, "Could not read input jpeg file %s\n", IMAGE_FILE ".jpg");
> -	free(data);
>  	return test_status;
>      }
>  
>      test_status = read_file (ctx, CAIRO_TEST_OUTPUT_DIR "/" BASENAME "-000.jpg", &out_data, &out_len);
>      if (test_status) {
> -	free (data);
> -	cairo_test_log (ctx,
> -			"Could not read input jpeg file %s\n",
> -			CAIRO_TEST_OUTPUT_DIR "/" BASENAME "-000.jpg");
>  	return test_status;
>      }
>  
> -- 
> 1.7.9.5
> 
> -- 
> cairo mailing list
> [email protected]
> http://lists.cairographics.org/mailman/listinfo/cairo
-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.