Skip to content

Commit

Permalink
test: Fix null pointer issue reported by cppcheck static analysis tool
Browse files Browse the repository at this point in the history
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.

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@samsung.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
  • Loading branch information
Ravi Nanjundappa authored and Bryce Harrington committed Aug 28, 2014
1 parent 52c4f0f commit c6ae5b1
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions test/pdf-mime-data.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -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;
}
}
Expand All @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit c6ae5b1

Please sign in to comment.