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

Bryce Harrington bryce at osg.samsung.com
Wed Aug 27 20:41:27 PDT 2014


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 <nravi.n at samsung.com>
> Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
> ---
>  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
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo


More information about the cairo mailing list