mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-02-06 00:00:28 +01:00
test: Fix null pointer issue reported by cppcheck static analysis tool
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>
This commit is contained in:
parent
52c4f0f2da
commit
c6ae5b1976
1 changed files with 14 additions and 11 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue