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