summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/libgd-src/tests/gif/bug00499.c
blob: 0fedb927ca40f3fba6797683d9978afa68f8f2c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
 * Test that adding identical images to GIF animations do no double-free
 *
 * We are adding two frames to a GIF animation in gdDisposalNone mode, were the
 * second frame is identical to the first, which result in that image to have
 * zero extent.  This program must not cause any memory issues.
 *
 * See also <https://github.com/libgd/libgd/issues/499>.
 */


#include "gd.h"
#include "gdtest.h"


int main()
{
    gdImagePtr im;
    int black;
    int size;
    void * res;

    im = gdImageCreate(100, 100);
    black = gdImageColorAllocate(im, 0, 0, 0);
    gdImageRectangle(im, 0, 0, 10, 10, black);

    res = gdImageGifAnimBeginPtr(im, &size, 1, 3);
    if (res != NULL) {
        gdFree(res);
    }

    res = gdImageGifAnimAddPtr(im, &size, 0, 0, 0, 100, gdDisposalNone, NULL);
    if (res != NULL) {
        gdFree(res);
    }

    res = gdImageGifAnimAddPtr(im, &size, 0, 0, 0, 100, gdDisposalNone, im);
    gdTestAssert(res == NULL);
    if (res != NULL) {
         gdFree(res);
    }

    res = gdImageGifAnimEndPtr(&size);
    if (res != NULL) {
        gdFree(res);
    }

    gdImageDestroy(im);

    return gdNumFailures();
}