Blame tests/tiff/tiff_invalid_read.c
|
Packit Service |
df60bb |
/*
|
|
Packit Service |
df60bb |
We're testing that reading corrupt TIFF files doesn't cause any memory issues,
|
|
Packit Service |
df60bb |
and that the operation gracefully fails (i.e. gdImageCreateFromTiffPtr() returns
|
|
Packit Service |
df60bb |
NULL).
|
|
Packit Service |
df60bb |
*/
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
#include "gd.h"
|
|
Packit Service |
df60bb |
#include "gdtest.h"
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
static void check_file(char *basename);
|
|
Packit Service |
df60bb |
static size_t read_test_file(char **buffer, char *basename);
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
int main()
|
|
Packit Service |
df60bb |
{
|
|
Packit Service |
df60bb |
check_file("tiff_invalid_read_1.tiff");
|
|
Packit Service |
df60bb |
check_file("tiff_invalid_read_2.tiff");
|
|
Packit Service |
df60bb |
check_file("tiff_invalid_read_3.tiff");
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
return gdNumFailures();
|
|
Packit Service |
df60bb |
}
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
static void check_file(char *basename)
|
|
Packit Service |
df60bb |
{
|
|
Packit Service |
df60bb |
gdImagePtr im;
|
|
Packit Service |
df60bb |
char *buffer;
|
|
Packit Service |
df60bb |
size_t size;
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
size = read_test_file(&buffer, basename);
|
|
Packit Service |
df60bb |
im = gdImageCreateFromTiffPtr(size, (void *) buffer);
|
|
Packit Service |
df60bb |
gdTestAssert(im == NULL);
|
|
Packit Service |
df60bb |
free(buffer);
|
|
Packit Service |
df60bb |
}
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
static size_t read_test_file(char **buffer, char *basename)
|
|
Packit Service |
df60bb |
{
|
|
Packit Service |
df60bb |
char *filename;
|
|
Packit Service |
df60bb |
FILE *fp;
|
|
Packit Service |
df60bb |
size_t exp_size, act_size;
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
filename = gdTestFilePath2("tiff", basename);
|
|
Packit Service |
df60bb |
fp = fopen(filename, "rb");
|
|
Packit Service |
df60bb |
gdTestAssert(fp != NULL);
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
fseek(fp, 0, SEEK_END);
|
|
Packit Service |
df60bb |
exp_size = ftell(fp);
|
|
Packit Service |
df60bb |
fseek(fp, 0, SEEK_SET);
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
*buffer = malloc(exp_size);
|
|
Packit Service |
df60bb |
gdTestAssert(*buffer != NULL);
|
|
Packit Service |
df60bb |
act_size = fread(*buffer, sizeof(**buffer), exp_size, fp);
|
|
Packit Service |
df60bb |
gdTestAssert(act_size == exp_size);
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
fclose(fp);
|
|
Packit Service |
df60bb |
free(filename);
|
|
Packit Service |
df60bb |
|
|
Packit Service |
df60bb |
return act_size;
|
|
Packit Service |
df60bb |
}
|