Skip to content

Commit db10f30

Browse files
author
tabe
committed
fixed FS#227
1 parent a52c979 commit db10f30

File tree

4 files changed

+70
-3
lines changed

4 files changed

+70
-3
lines changed

src/gd_gif_out.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ BGD_DECLARE(void) gdImageGifAnimBeginCtx(gdImagePtr im, gdIOCtxPtr out, int Glob
191191
B = GlobalCM ? 0x80 : 0;
192192

193193
/* OR in the resolution */
194-
B |= (Resolution - 1) << 5;
194+
B |= (Resolution - 1) << 4;
195195

196196
/* OR in the Bits per Pixel */
197197
B |= (BitsPerPixel - 1);
@@ -640,7 +640,7 @@ static void GIFEncode(gdIOCtxPtr fp, int GWidth, int GHeight, int GInterlace, in
640640
B = 0x80;
641641

642642
/* OR in the resolution */
643-
B |= (Resolution - 1) << 5;
643+
B |= (Resolution - 1) << 4;
644644

645645
/* OR in the Bits per Pixel */
646646
B |= (BitsPerPixel - 1);

tests/gif/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ SET(TESTS_FILES
88
bug00060
99
bug00066
1010
bug00181
11+
bug00227
1112
)
1213

1314
FOREACH(test_name ${TESTS_FILES})

tests/gif/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
## Process this file with automake to produce Makefile.in -*-Makefile-*-
22

3-
EXTRA_DIST = CMakeLists.txt gif_im2im.c gif_null.c bug00005_0.gif bug00005_2.c bug00005_2.gif bug00005.c bug00060.c bug00066.c bug00066.gif bug00005_1.gif bug00005_2_exp.png bug00005_3.gif bug00006.c bug00060.gif bug00066_exp.png bug00181.c
3+
EXTRA_DIST = CMakeLists.txt gif_im2im.c gif_null.c bug00005_0.gif bug00005_2.c bug00005_2.gif bug00005.c bug00060.c bug00066.c bug00066.gif bug00005_1.gif bug00005_2_exp.png bug00005_3.gif bug00006.c bug00060.gif bug00066_exp.png bug00181.c bug00227.c

tests/gif/bug00227.c

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <gd.h>
4+
#include <gdtest.h>
5+
6+
#define WIDTH 150
7+
#define HEIGHT 1
8+
#define DELAY 100
9+
#define PROBE_SIZE 11
10+
11+
int main()
12+
{
13+
FILE *fp;
14+
gdImagePtr im0, im1, im2;
15+
int file, i;
16+
char *buf;
17+
18+
/* generate a GIF animation */
19+
im0 = gdImageCreate(WIDTH, HEIGHT);
20+
if (!im0) return 1;
21+
for (i = 0; i < WIDTH; i++) {
22+
int c = gdImageColorAllocate(im0, i, 0xff, 0xff);
23+
gdImageSetPixel(im0, i, 0, c);
24+
}
25+
26+
fp = fopen("bug00227.gif", "wb");
27+
if (!fp) return 1;
28+
29+
gdImageGifAnimBegin(im0, fp, 0, 0);
30+
31+
gdImageGifAnimAdd(im0, fp, 1, 0, 0, DELAY, 1, NULL);
32+
33+
im1 = gdImageCreate(WIDTH, HEIGHT);
34+
if (!im1) return 1;
35+
for (i = 0; i < WIDTH; i++) {
36+
int c = gdImageColorAllocate(im1, i, 0x00, 0xff);
37+
gdImageSetPixel(im1, i, 0, c);
38+
}
39+
gdImageGifAnimAdd(im1, fp, 1, 0, 0, DELAY, 1, im0);
40+
41+
im2 = gdImageCreate(WIDTH, HEIGHT);
42+
if (!im2) return 1;
43+
for (i = 0; i < WIDTH; i++) {
44+
int c = gdImageColorAllocate(im2, i, 0xff, 0x00);
45+
gdImageSetPixel(im2, i, 0, c);
46+
}
47+
gdImageGifAnimAdd(im2, fp, 1, 0, 0, DELAY, 1, im1);
48+
49+
gdImageGifAnimEnd(fp);
50+
51+
fclose(fp);
52+
53+
gdImageDestroy(im0);
54+
gdImageDestroy(im1);
55+
gdImageDestroy(im2);
56+
57+
/* check the Global Color Table flag */
58+
fp = fopen("bug00227.gif", "rb");
59+
if (!fp) return 1;
60+
buf = malloc(PROBE_SIZE);
61+
if (!buf) return 1;
62+
if (PROBE_SIZE != fread(buf, 1, PROBE_SIZE, fp)) return 1;
63+
if (buf[PROBE_SIZE-1] & 0x80) return 1;
64+
fclose(fp);
65+
return 0;
66+
}

0 commit comments

Comments
 (0)