Browse Source

tiff: fix multiple CVE's

This commit fixes multiple CVE's for library tiff:
CVE-2012-4564
CVE-2013-1960
CVE-2013-1961
CVE-2013-4231
CVE-2013-4232
CVE-2013-4244
CVE-2013-4243

Signed-off-by: Jiri Slachta <slachta@cesnet.cz>
Jiri Slachta 10 years ago
parent
commit
aafd3b9572

+ 1
- 1
libs/tiff/Makefile View File

@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
9 9
 
10 10
 PKG_NAME:=tiff
11 11
 PKG_VERSION:=4.0.3
12
-PKG_RELEASE:=1
12
+PKG_RELEASE:=2
13 13
 
14 14
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
15 15
 PKG_SOURCE_URL:=http://download.osgeo.org/libtiff

+ 31
- 0
libs/tiff/patches/010-CVE-2012-4564.patch View File

@@ -0,0 +1,31 @@
1
+Index: tiff-4.0.3/tools/ppm2tiff.c
2
+===================================================================
3
+--- tiff-4.0.3.orig/tools/ppm2tiff.c	2013-06-23 10:36:50.779629492 -0400
4
++++ tiff-4.0.3/tools/ppm2tiff.c	2013-06-23 10:36:50.775629494 -0400
5
+@@ -89,6 +89,7 @@
6
+ 	int c;
7
+ 	extern int optind;
8
+ 	extern char* optarg;
9
++	tmsize_t scanline_size;
10
+ 
11
+ 	if (argc < 2) {
12
+ 	    fprintf(stderr, "%s: Too few arguments\n", argv[0]);
13
+@@ -237,8 +238,16 @@
14
+ 	}
15
+ 	if (TIFFScanlineSize(out) > linebytes)
16
+ 		buf = (unsigned char *)_TIFFmalloc(linebytes);
17
+-	else
18
+-		buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out));
19
++	else {
20
++		scanline_size = TIFFScanlineSize(out);
21
++		if (scanline_size != 0)
22
++			buf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out));
23
++		else {
24
++			fprintf(stderr, "%s: scanline size overflow\n",infile);
25
++			(void) TIFFClose(out);
26
++			exit(-2);
27
++			}
28
++		}
29
+ 	if (resolution > 0) {
30
+ 		TIFFSetField(out, TIFFTAG_XRESOLUTION, resolution);
31
+ 		TIFFSetField(out, TIFFTAG_YRESOLUTION, resolution);

+ 146
- 0
libs/tiff/patches/011-CVE-2013-1960.patch View File

@@ -0,0 +1,146 @@
1
+Index: tiff-4.0.3/tools/tiff2pdf.c
2
+===================================================================
3
+--- tiff-4.0.3.orig/tools/tiff2pdf.c	2013-06-23 10:36:50.979629486 -0400
4
++++ tiff-4.0.3/tools/tiff2pdf.c	2013-06-23 10:36:50.975629486 -0400
5
+@@ -3341,33 +3341,56 @@
6
+ 	uint32 height){
7
+ 
8
+ 	tsize_t i=0;
9
+-	uint16 ri =0;
10
+-	uint16 v_samp=1;
11
+-	uint16 h_samp=1;
12
+-	int j=0;
13
+-	
14
+-	i++;
15
+-	
16
+-	while(i<(*striplength)){
17
++
18
++	while (i < *striplength) {
19
++		tsize_t datalen;
20
++		uint16 ri;
21
++		uint16 v_samp;
22
++		uint16 h_samp;
23
++		int j;
24
++		int ncomp;
25
++
26
++		/* marker header: one or more FFs */
27
++		if (strip[i] != 0xff)
28
++			return(0);
29
++		i++;
30
++		while (i < *striplength && strip[i] == 0xff)
31
++			i++;
32
++		if (i >= *striplength)
33
++			return(0);
34
++		/* SOI is the only pre-SOS marker without a length word */
35
++		if (strip[i] == 0xd8)
36
++			datalen = 0;
37
++		else {
38
++			if ((*striplength - i) <= 2)
39
++				return(0);
40
++			datalen = (strip[i+1] << 8) | strip[i+2];
41
++			if (datalen < 2 || datalen >= (*striplength - i))
42
++				return(0);
43
++		}
44
+ 		switch( strip[i] ){
45
+-			case 0xd8:
46
+-				/* SOI - start of image */
47
++			case 0xd8:	/* SOI - start of image */
48
+ 				_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), 2);
49
+ 				*bufferoffset+=2;
50
+-				i+=2;
51
+ 				break;
52
+-			case 0xc0:
53
+-			case 0xc1:
54
+-			case 0xc3:
55
+-			case 0xc9:
56
+-			case 0xca:
57
++			case 0xc0:	/* SOF0 */
58
++			case 0xc1:	/* SOF1 */
59
++			case 0xc3:	/* SOF3 */
60
++			case 0xc9:	/* SOF9 */
61
++			case 0xca:	/* SOF10 */
62
+ 				if(no==0){
63
+-					_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), strip[i+2]+2);
64
+-					for(j=0;j<buffer[*bufferoffset+9];j++){
65
+-						if( (buffer[*bufferoffset+11+(2*j)]>>4) > h_samp) 
66
+-							h_samp = (buffer[*bufferoffset+11+(2*j)]>>4);
67
+-						if( (buffer[*bufferoffset+11+(2*j)] & 0x0f) > v_samp) 
68
+-							v_samp = (buffer[*bufferoffset+11+(2*j)] & 0x0f);
69
++					_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), datalen+2);
70
++					ncomp = buffer[*bufferoffset+9];
71
++					if (ncomp < 1 || ncomp > 4)
72
++						return(0);
73
++					v_samp=1;
74
++					h_samp=1;
75
++					for(j=0;j<ncomp;j++){
76
++						uint16 samp = buffer[*bufferoffset+11+(3*j)];
77
++						if( (samp>>4) > h_samp) 
78
++							h_samp = (samp>>4);
79
++						if( (samp & 0x0f) > v_samp) 
80
++							v_samp = (samp & 0x0f);
81
+ 					}
82
+ 					v_samp*=8;
83
+ 					h_samp*=8;
84
+@@ -3381,45 +3404,43 @@
85
+                                           (unsigned char) ((height>>8) & 0xff);
86
+ 					buffer[*bufferoffset+6]=
87
+                                             (unsigned char) (height & 0xff);
88
+-					*bufferoffset+=strip[i+2]+2;
89
+-					i+=strip[i+2]+2;
90
+-
91
++					*bufferoffset+=datalen+2;
92
++					/* insert a DRI marker */
93
+ 					buffer[(*bufferoffset)++]=0xff;
94
+ 					buffer[(*bufferoffset)++]=0xdd;
95
+ 					buffer[(*bufferoffset)++]=0x00;
96
+ 					buffer[(*bufferoffset)++]=0x04;
97
+ 					buffer[(*bufferoffset)++]=(ri >> 8) & 0xff;
98
+ 					buffer[(*bufferoffset)++]= ri & 0xff;
99
+-				} else {
100
+-					i+=strip[i+2]+2;
101
+ 				}
102
+ 				break;
103
+-			case 0xc4:
104
+-			case 0xdb:
105
+-				_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), strip[i+2]+2);
106
+-				*bufferoffset+=strip[i+2]+2;
107
+-				i+=strip[i+2]+2;
108
++			case 0xc4: /* DHT */
109
++			case 0xdb: /* DQT */
110
++				_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), datalen+2);
111
++				*bufferoffset+=datalen+2;
112
+ 				break;
113
+-			case 0xda:
114
++			case 0xda: /* SOS */
115
+ 				if(no==0){
116
+-					_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), strip[i+2]+2);
117
+-					*bufferoffset+=strip[i+2]+2;
118
+-					i+=strip[i+2]+2;
119
++					_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), datalen+2);
120
++					*bufferoffset+=datalen+2;
121
+ 				} else {
122
+ 					buffer[(*bufferoffset)++]=0xff;
123
+ 					buffer[(*bufferoffset)++]=
124
+                                             (unsigned char)(0xd0 | ((no-1)%8));
125
+-					i+=strip[i+2]+2;
126
+ 				}
127
+-				_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i-1]), (*striplength)-i-1);
128
+-				*bufferoffset+=(*striplength)-i-1;
129
++				i += datalen + 1;
130
++				/* copy remainder of strip */
131
++				_TIFFmemcpy(&(buffer[*bufferoffset]), &(strip[i]), *striplength - i);
132
++				*bufferoffset+= *striplength - i;
133
+ 				return(1);
134
+ 			default:
135
+-				i+=strip[i+2]+2;
136
++				/* ignore any other marker */
137
++				break;
138
+ 		}
139
++		i += datalen + 1;
140
+ 	}
141
+-	
142
+ 
143
++	/* failed to find SOS marker */
144
+ 	return(0);
145
+ }
146
+ #endif

+ 768
- 0
libs/tiff/patches/012-CVE-2013-1961.patch View File

@@ -0,0 +1,768 @@
1
+Index: tiff-4.0.3/contrib/dbs/xtiff/xtiff.c
2
+===================================================================
3
+--- tiff-4.0.3.orig/contrib/dbs/xtiff/xtiff.c	2013-06-23 10:36:51.163629483 -0400
4
++++ tiff-4.0.3/contrib/dbs/xtiff/xtiff.c	2013-06-23 10:36:51.147629484 -0400
5
+@@ -512,9 +512,9 @@
6
+     Arg args[1];
7
+ 
8
+     if (tfMultiPage)
9
+-        sprintf(buffer, "%s - page %d", fileName, tfDirectory);
10
++        snprintf(buffer, sizeof(buffer), "%s - page %d", fileName, tfDirectory);
11
+     else
12
+-        strcpy(buffer, fileName);
13
++        snprintf(buffer, sizeof(buffer), "%s", fileName);
14
+     XtSetArg(args[0], XtNlabel, buffer);
15
+     XtSetValues(labelWidget, args, 1);
16
+ }
17
+Index: tiff-4.0.3/libtiff/tif_dirinfo.c
18
+===================================================================
19
+--- tiff-4.0.3.orig/libtiff/tif_dirinfo.c	2013-06-23 10:36:51.163629483 -0400
20
++++ tiff-4.0.3/libtiff/tif_dirinfo.c	2013-06-23 10:36:51.147629484 -0400
21
+@@ -711,7 +711,7 @@
22
+ 	 * note that this name is a special sign to TIFFClose() and
23
+ 	 * _TIFFSetupFields() to free the field
24
+ 	 */
25
+-	sprintf(fld->field_name, "Tag %d", (int) tag);
26
++	snprintf(fld->field_name, 32, "Tag %d", (int) tag);
27
+ 
28
+ 	return fld;    
29
+ }
30
+Index: tiff-4.0.3/libtiff/tif_codec.c
31
+===================================================================
32
+--- tiff-4.0.3.orig/libtiff/tif_codec.c	2013-06-23 10:36:51.163629483 -0400
33
++++ tiff-4.0.3/libtiff/tif_codec.c	2013-06-23 10:36:51.151629482 -0400
34
+@@ -108,7 +108,8 @@
35
+ 	const TIFFCodec* c = TIFFFindCODEC(tif->tif_dir.td_compression);
36
+         char compression_code[20];
37
+         
38
+-        sprintf( compression_code, "%d", tif->tif_dir.td_compression );
39
++        snprintf(compression_code, sizeof(compression_code), "%d",
40
++		 tif->tif_dir.td_compression );
41
+ 	TIFFErrorExt(tif->tif_clientdata, tif->tif_name,
42
+                      "%s compression support is not configured", 
43
+                      c ? c->name : compression_code );
44
+Index: tiff-4.0.3/tools/tiffdither.c
45
+===================================================================
46
+--- tiff-4.0.3.orig/tools/tiffdither.c	2013-06-23 10:36:51.163629483 -0400
47
++++ tiff-4.0.3/tools/tiffdither.c	2013-06-23 10:36:51.151629482 -0400
48
+@@ -260,7 +260,7 @@
49
+ 		TIFFSetField(out, TIFFTAG_FILLORDER, fillorder);
50
+ 	else
51
+ 		CopyField(TIFFTAG_FILLORDER, shortv);
52
+-	sprintf(thing, "Dithered B&W version of %s", argv[optind]);
53
++	snprintf(thing, sizeof(thing), "Dithered B&W version of %s", argv[optind]);
54
+ 	TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing);
55
+ 	CopyField(TIFFTAG_PHOTOMETRIC, shortv);
56
+ 	CopyField(TIFFTAG_ORIENTATION, shortv);
57
+Index: tiff-4.0.3/tools/rgb2ycbcr.c
58
+===================================================================
59
+--- tiff-4.0.3.orig/tools/rgb2ycbcr.c	2013-06-23 10:36:51.163629483 -0400
60
++++ tiff-4.0.3/tools/rgb2ycbcr.c	2013-06-23 10:36:51.151629482 -0400
61
+@@ -332,7 +332,8 @@
62
+ 	TIFFSetField(out, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
63
+ 	{ char buf[2048];
64
+ 	  char *cp = strrchr(TIFFFileName(in), '/');
65
+-	  sprintf(buf, "YCbCr conversion of %s", cp ? cp+1 : TIFFFileName(in));
66
++	  snprintf(buf, sizeof(buf), "YCbCr conversion of %s",
67
++		   cp ? cp+1 : TIFFFileName(in));
68
+ 	  TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, buf);
69
+ 	}
70
+ 	TIFFSetField(out, TIFFTAG_SOFTWARE, TIFFGetVersion());
71
+Index: tiff-4.0.3/tools/tiff2pdf.c
72
+===================================================================
73
+--- tiff-4.0.3.orig/tools/tiff2pdf.c	2013-06-23 10:36:51.163629483 -0400
74
++++ tiff-4.0.3/tools/tiff2pdf.c	2013-06-23 10:36:51.151629482 -0400
75
+@@ -3630,7 +3630,9 @@
76
+ 	char buffer[16];
77
+ 	int buflen=0;
78
+ 	
79
+-	buflen=sprintf(buffer, "%%PDF-%u.%u ", t2p->pdf_majorversion&0xff, t2p->pdf_minorversion&0xff);
80
++	buflen = snprintf(buffer, sizeof(buffer), "%%PDF-%u.%u ",
81
++			  t2p->pdf_majorversion&0xff,
82
++			  t2p->pdf_minorversion&0xff);
83
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
84
+ 	written += t2pWriteFile(output, (tdata_t)"\n%\342\343\317\323\n", 7);
85
+ 
86
+@@ -3644,10 +3646,10 @@
87
+ tsize_t t2p_write_pdf_obj_start(uint32 number, TIFF* output){
88
+ 
89
+ 	tsize_t written=0;
90
+-	char buffer[16];
91
++	char buffer[32];
92
+ 	int buflen=0;
93
+ 
94
+-	buflen=sprintf(buffer, "%lu", (unsigned long)number);
95
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)number);
96
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen );
97
+ 	written += t2pWriteFile(output, (tdata_t) " 0 obj\n", 7);
98
+ 
99
+@@ -3686,13 +3688,13 @@
100
+ 	written += t2pWriteFile(output, (tdata_t) "/", 1);
101
+ 	for (i=0;i<namelen;i++){
102
+ 		if ( ((unsigned char)name[i]) < 0x21){
103
+-			sprintf(buffer, "#%.2X", name[i]);
104
++			snprintf(buffer, sizeof(buffer), "#%.2X", name[i]);
105
+ 			buffer[sizeof(buffer) - 1] = '\0';
106
+ 			written += t2pWriteFile(output, (tdata_t) buffer, 3);
107
+ 			nextchar=1;
108
+ 		}
109
+ 		if ( ((unsigned char)name[i]) > 0x7E){
110
+-			sprintf(buffer, "#%.2X", name[i]);
111
++			snprintf(buffer, sizeof(buffer), "#%.2X", name[i]);
112
+ 			buffer[sizeof(buffer) - 1] = '\0';
113
+ 			written += t2pWriteFile(output, (tdata_t) buffer, 3);
114
+ 			nextchar=1;
115
+@@ -3700,57 +3702,57 @@
116
+ 		if (nextchar==0){
117
+ 			switch (name[i]){
118
+ 				case 0x23:
119
+-					sprintf(buffer, "#%.2X", name[i]);
120
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]);
121
+ 					buffer[sizeof(buffer) - 1] = '\0';
122
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
123
+ 					break;
124
+ 				case 0x25:
125
+-					sprintf(buffer, "#%.2X", name[i]);
126
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]);
127
+ 					buffer[sizeof(buffer) - 1] = '\0';
128
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
129
+ 					break;
130
+ 				case 0x28:
131
+-					sprintf(buffer, "#%.2X", name[i]);
132
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]);
133
+ 					buffer[sizeof(buffer) - 1] = '\0';
134
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
135
+ 					break;
136
+ 				case 0x29:
137
+-					sprintf(buffer, "#%.2X", name[i]); 
138
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); 
139
+ 					buffer[sizeof(buffer) - 1] = '\0';
140
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
141
+ 					break;
142
+ 				case 0x2F:
143
+-					sprintf(buffer, "#%.2X", name[i]); 
144
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); 
145
+ 					buffer[sizeof(buffer) - 1] = '\0';
146
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
147
+ 					break;
148
+ 				case 0x3C:
149
+-					sprintf(buffer, "#%.2X", name[i]); 
150
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); 
151
+ 					buffer[sizeof(buffer) - 1] = '\0';
152
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
153
+ 					break;
154
+ 				case 0x3E:
155
+-					sprintf(buffer, "#%.2X", name[i]);
156
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]);
157
+ 					buffer[sizeof(buffer) - 1] = '\0';
158
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
159
+ 					break;
160
+ 				case 0x5B:
161
+-					sprintf(buffer, "#%.2X", name[i]); 
162
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); 
163
+ 					buffer[sizeof(buffer) - 1] = '\0';
164
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
165
+ 					break;
166
+ 				case 0x5D:
167
+-					sprintf(buffer, "#%.2X", name[i]);
168
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]);
169
+ 					buffer[sizeof(buffer) - 1] = '\0';
170
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
171
+ 					break;
172
+ 				case 0x7B:
173
+-					sprintf(buffer, "#%.2X", name[i]); 
174
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); 
175
+ 					buffer[sizeof(buffer) - 1] = '\0';
176
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
177
+ 					break;
178
+ 				case 0x7D:
179
+-					sprintf(buffer, "#%.2X", name[i]); 
180
++					snprintf(buffer, sizeof(buffer), "#%.2X", name[i]); 
181
+ 					buffer[sizeof(buffer) - 1] = '\0';
182
+ 					written += t2pWriteFile(output, (tdata_t) buffer, 3);
183
+ 					break;
184
+@@ -3865,14 +3867,14 @@
185
+ tsize_t t2p_write_pdf_stream_dict(tsize_t len, uint32 number, TIFF* output){
186
+ 	
187
+ 	tsize_t written=0;
188
+-	char buffer[16];
189
++	char buffer[32];
190
+ 	int buflen=0;
191
+ 	
192
+ 	written += t2pWriteFile(output, (tdata_t) "/Length ", 8);
193
+ 	if(len!=0){
194
+ 		written += t2p_write_pdf_stream_length(len, output);
195
+ 	} else {
196
+-		buflen=sprintf(buffer, "%lu", (unsigned long)number);
197
++		buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)number);
198
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
199
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R \n", 6);
200
+ 	}
201
+@@ -3913,10 +3915,10 @@
202
+ tsize_t t2p_write_pdf_stream_length(tsize_t len, TIFF* output){
203
+ 
204
+ 	tsize_t written=0;
205
+-	char buffer[16];
206
++	char buffer[32];
207
+ 	int buflen=0;
208
+ 
209
+-	buflen=sprintf(buffer, "%lu", (unsigned long)len);
210
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)len);
211
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
212
+ 	written += t2pWriteFile(output, (tdata_t) "\n", 1);
213
+ 
214
+@@ -3930,7 +3932,7 @@
215
+ tsize_t t2p_write_pdf_catalog(T2P* t2p, TIFF* output)
216
+ {
217
+ 	tsize_t written = 0;
218
+-	char buffer[16];
219
++	char buffer[32];
220
+ 	int buflen = 0;
221
+ 
222
+ 	written += t2pWriteFile(output, 
223
+@@ -3969,7 +3971,6 @@
224
+ 		written += t2p_write_pdf_string(t2p->pdf_datetime, output);
225
+ 	}
226
+ 	written += t2pWriteFile(output, (tdata_t) "\n/Producer ", 11);
227
+-	_TIFFmemset((tdata_t)buffer, 0x00, sizeof(buffer));
228
+ 	snprintf(buffer, sizeof(buffer), "libtiff / tiff2pdf - %d", TIFFLIB_VERSION);
229
+ 	written += t2p_write_pdf_string(buffer, output);
230
+ 	written += t2pWriteFile(output, (tdata_t) "\n", 1);
231
+@@ -4110,7 +4111,7 @@
232
+ {
233
+ 	tsize_t written=0;
234
+ 	tdir_t i=0;
235
+-	char buffer[16];
236
++	char buffer[32];
237
+ 	int buflen=0;
238
+ 
239
+ 	int page=0;
240
+@@ -4118,7 +4119,7 @@
241
+ 		(tdata_t) "<< \n/Type /Pages \n/Kids [ ", 26);
242
+ 	page = t2p->pdf_pages+1;
243
+ 	for (i=0;i<t2p->tiff_pagecount;i++){
244
+-		buflen=sprintf(buffer, "%d", page);
245
++		buflen=snprintf(buffer, sizeof(buffer), "%d", page);
246
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
247
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
248
+ 		if ( ((i+1)%8)==0 ) {
249
+@@ -4133,8 +4134,7 @@
250
+ 		}
251
+ 	}
252
+ 	written += t2pWriteFile(output, (tdata_t) "] \n/Count ", 10);
253
+-	_TIFFmemset(buffer, 0x00, 16);
254
+-	buflen=sprintf(buffer, "%d", t2p->tiff_pagecount);
255
++	buflen=snprintf(buffer, sizeof(buffer), "%d", t2p->tiff_pagecount);
256
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
257
+ 	written += t2pWriteFile(output, (tdata_t) " \n>> \n", 6);
258
+ 
259
+@@ -4149,28 +4149,28 @@
260
+ 
261
+ 	unsigned int i=0;
262
+ 	tsize_t written=0;
263
+-	char buffer[16];
264
++	char buffer[256];
265
+ 	int buflen=0;
266
+ 
267
+ 	written += t2pWriteFile(output, (tdata_t) "<<\n/Type /Page \n/Parent ", 24);
268
+-	buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_pages);
269
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_pages);
270
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
271
+ 	written += t2pWriteFile(output, (tdata_t) " 0 R \n", 6);
272
+ 	written += t2pWriteFile(output, (tdata_t) "/MediaBox [", 11); 
273
+-	buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.x1);
274
++	buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.x1);
275
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
276
+ 	written += t2pWriteFile(output, (tdata_t) " ", 1); 
277
+-	buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.y1);
278
++	buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.y1);
279
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
280
+ 	written += t2pWriteFile(output, (tdata_t) " ", 1); 
281
+-	buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.x2);
282
++	buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.x2);
283
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
284
+ 	written += t2pWriteFile(output, (tdata_t) " ", 1); 
285
+-	buflen=sprintf(buffer, "%.4f",t2p->pdf_mediabox.y2);
286
++	buflen=snprintf(buffer, sizeof(buffer), "%.4f",t2p->pdf_mediabox.y2);
287
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
288
+ 	written += t2pWriteFile(output, (tdata_t) "] \n", 3); 
289
+ 	written += t2pWriteFile(output, (tdata_t) "/Contents ", 10);
290
+-	buflen=sprintf(buffer, "%lu", (unsigned long)(object + 1));
291
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(object + 1));
292
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
293
+ 	written += t2pWriteFile(output, (tdata_t) " 0 R \n", 6);
294
+ 	written += t2pWriteFile(output, (tdata_t) "/Resources << \n", 15);
295
+@@ -4178,15 +4178,13 @@
296
+ 		written += t2pWriteFile(output, (tdata_t) "/XObject <<\n", 12);
297
+ 		for(i=0;i<t2p->tiff_tiles[t2p->pdf_page].tiles_tilecount;i++){
298
+ 			written += t2pWriteFile(output, (tdata_t) "/Im", 3);
299
+-			buflen = sprintf(buffer, "%u", t2p->pdf_page+1);
300
++			buflen = snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_page+1);
301
+ 			written += t2pWriteFile(output, (tdata_t) buffer, buflen);
302
+ 			written += t2pWriteFile(output, (tdata_t) "_", 1);
303
+-			buflen = sprintf(buffer, "%u", i+1);
304
++			buflen = snprintf(buffer, sizeof(buffer), "%u", i+1);
305
+ 			written += t2pWriteFile(output, (tdata_t) buffer, buflen);
306
+ 			written += t2pWriteFile(output, (tdata_t) " ", 1);
307
+-			buflen = sprintf(
308
+-				buffer, 
309
+-				"%lu", 
310
++			buflen = snprintf(buffer, sizeof(buffer), "%lu",
311
+ 				(unsigned long)(object+3+(2*i)+t2p->tiff_pages[t2p->pdf_page].page_extra)); 
312
+ 			written += t2pWriteFile(output, (tdata_t) buffer, buflen);
313
+ 			written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
314
+@@ -4198,12 +4196,10 @@
315
+ 	} else {
316
+ 			written += t2pWriteFile(output, (tdata_t) "/XObject <<\n", 12);
317
+ 			written += t2pWriteFile(output, (tdata_t) "/Im", 3);
318
+-			buflen = sprintf(buffer, "%u", t2p->pdf_page+1);
319
++			buflen = snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_page+1);
320
+ 			written += t2pWriteFile(output, (tdata_t) buffer, buflen);
321
+ 			written += t2pWriteFile(output, (tdata_t) " ", 1);
322
+-			buflen = sprintf(
323
+-				buffer, 
324
+-				"%lu", 
325
++			buflen = snprintf(buffer, sizeof(buffer), "%lu",
326
+ 				(unsigned long)(object+3+(2*i)+t2p->tiff_pages[t2p->pdf_page].page_extra)); 
327
+ 			written += t2pWriteFile(output, (tdata_t) buffer, buflen);
328
+ 			written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
329
+@@ -4212,9 +4208,7 @@
330
+ 	if(t2p->tiff_transferfunctioncount != 0) {
331
+ 		written += t2pWriteFile(output, (tdata_t) "/ExtGState <<", 13);
332
+ 		t2pWriteFile(output, (tdata_t) "/GS1 ", 5);
333
+-		buflen = sprintf(
334
+-			buffer, 
335
+-			"%lu", 
336
++		buflen = snprintf(buffer, sizeof(buffer), "%lu",
337
+ 			(unsigned long)(object + 3)); 
338
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
339
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
340
+@@ -4587,7 +4581,7 @@
341
+ 	if(t2p->tiff_tiles[t2p->pdf_page].tiles_tilecount>0){ 
342
+ 		for(i=0;i<t2p->tiff_tiles[t2p->pdf_page].tiles_tilecount; i++){
343
+ 			box=t2p->tiff_tiles[t2p->pdf_page].tiles_tiles[i].tile_box;
344
+-			buflen=sprintf(buffer, 
345
++			buflen=snprintf(buffer, sizeof(buffer), 
346
+ 				"q %s %.4f %.4f %.4f %.4f %.4f %.4f cm /Im%d_%ld Do Q\n", 
347
+ 				t2p->tiff_transferfunctioncount?"/GS1 gs ":"",
348
+ 				box.mat[0],
349
+@@ -4602,7 +4596,7 @@
350
+ 		}
351
+ 	} else {
352
+ 		box=t2p->pdf_imagebox;
353
+-		buflen=sprintf(buffer, 
354
++		buflen=snprintf(buffer, sizeof(buffer), 
355
+ 			"q %s %.4f %.4f %.4f %.4f %.4f %.4f cm /Im%d Do Q\n", 
356
+ 			t2p->tiff_transferfunctioncount?"/GS1 gs ":"",
357
+ 			box.mat[0],
358
+@@ -4627,59 +4621,48 @@
359
+ 												TIFF* output){
360
+ 
361
+ 	tsize_t written=0;
362
+-	char buffer[16];
363
++	char buffer[32];
364
+ 	int buflen=0;
365
+ 
366
+ 	written += t2p_write_pdf_stream_dict(0, t2p->pdf_xrefcount+1, output); 
367
+ 	written += t2pWriteFile(output, 
368
+ 		(tdata_t) "/Type /XObject \n/Subtype /Image \n/Name /Im", 
369
+ 		42);
370
+-	buflen=sprintf(buffer, "%u", t2p->pdf_page+1);
371
++	buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_page+1);
372
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
373
+ 	if(tile != 0){
374
+ 		written += t2pWriteFile(output, (tdata_t) "_", 1);
375
+-		buflen=sprintf(buffer, "%lu", (unsigned long)tile);
376
++		buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)tile);
377
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
378
+ 	}
379
+ 	written += t2pWriteFile(output, (tdata_t) "\n/Width ", 8);
380
+-	_TIFFmemset((tdata_t)buffer, 0x00, 16);
381
+ 	if(tile==0){
382
+-		buflen=sprintf(buffer, "%lu", (unsigned long)t2p->tiff_width);
383
++		buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_width);
384
+ 	} else {
385
+ 		if(t2p_tile_is_right_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)!=0){
386
+-			buflen=sprintf(
387
+-				buffer, 
388
+-				"%lu", 
389
++			buflen=snprintf(buffer, sizeof(buffer), "%lu",
390
+ 				(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth);
391
+ 		} else {
392
+-			buflen=sprintf(
393
+-				buffer, 
394
+-				"%lu", 
395
++			buflen=snprintf(buffer, sizeof(buffer), "%lu",
396
+ 				(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth);
397
+ 		}
398
+ 	}
399
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
400
+ 	written += t2pWriteFile(output, (tdata_t) "\n/Height ", 9);
401
+-	_TIFFmemset((tdata_t)buffer, 0x00, 16);
402
+ 	if(tile==0){
403
+-		buflen=sprintf(buffer, "%lu", (unsigned long)t2p->tiff_length);
404
++		buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->tiff_length);
405
+ 	} else {
406
+ 		if(t2p_tile_is_bottom_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)!=0){
407
+-			buflen=sprintf(
408
+-				buffer, 
409
+-				"%lu", 
410
++			buflen=snprintf(buffer, sizeof(buffer), "%lu",
411
+ 				(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilelength);
412
+ 		} else {
413
+-			buflen=sprintf(
414
+-				buffer, 
415
+-				"%lu", 
416
++			buflen=snprintf(buffer, sizeof(buffer), "%lu",
417
+ 				(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength);
418
+ 		}
419
+ 	}
420
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
421
+ 	written += t2pWriteFile(output, (tdata_t) "\n/BitsPerComponent ", 19);
422
+-	_TIFFmemset((tdata_t)buffer, 0x00, 16);
423
+-	buflen=sprintf(buffer, "%u", t2p->tiff_bitspersample);
424
++	buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->tiff_bitspersample);
425
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
426
+ 	written += t2pWriteFile(output, (tdata_t) "\n/ColorSpace ", 13);
427
+ 	written += t2p_write_pdf_xobject_cs(t2p, output);
428
+@@ -4723,11 +4706,10 @@
429
+ 		t2p->pdf_colorspace ^= T2P_CS_PALETTE;
430
+ 		written += t2p_write_pdf_xobject_cs(t2p, output);
431
+ 		t2p->pdf_colorspace |= T2P_CS_PALETTE;
432
+-		buflen=sprintf(buffer, "%u", (0x0001 << t2p->tiff_bitspersample)-1 );
433
++		buflen=snprintf(buffer, sizeof(buffer), "%u", (0x0001 << t2p->tiff_bitspersample)-1 );
434
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
435
+ 		written += t2pWriteFile(output, (tdata_t) " ", 1);
436
+-		_TIFFmemset(buffer, 0x00, 16);
437
+-		buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_palettecs ); 
438
++		buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_palettecs ); 
439
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
440
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R ]\n", 7);
441
+ 		return(written);
442
+@@ -4761,10 +4743,10 @@
443
+ 			X_W /= Y_W;
444
+ 			Z_W /= Y_W;
445
+ 			Y_W = 1.0F;
446
+-			buflen=sprintf(buffer, "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W);
447
++			buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W);
448
+ 			written += t2pWriteFile(output, (tdata_t) buffer, buflen);
449
+ 			written += t2pWriteFile(output, (tdata_t) "/Range ", 7);
450
+-			buflen=sprintf(buffer, "[%d %d %d %d] \n", 
451
++			buflen=snprintf(buffer, sizeof(buffer), "[%d %d %d %d] \n", 
452
+ 				t2p->pdf_labrange[0], 
453
+ 				t2p->pdf_labrange[1], 
454
+ 				t2p->pdf_labrange[2], 
455
+@@ -4780,26 +4762,26 @@
456
+ tsize_t t2p_write_pdf_transfer(T2P* t2p, TIFF* output){
457
+ 
458
+ 	tsize_t written=0;
459
+-	char buffer[16];
460
++	char buffer[32];
461
+ 	int buflen=0;
462
+ 
463
+ 	written += t2pWriteFile(output, (tdata_t) "<< /Type /ExtGState \n/TR ", 25);
464
+ 	if(t2p->tiff_transferfunctioncount == 1){
465
+-		buflen=sprintf(buffer, "%lu",
466
++		buflen=snprintf(buffer, sizeof(buffer), "%lu",
467
+ 			       (unsigned long)(t2p->pdf_xrefcount + 1));
468
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
469
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
470
+ 	} else {
471
+ 		written += t2pWriteFile(output, (tdata_t) "[ ", 2);
472
+-		buflen=sprintf(buffer, "%lu",
473
++		buflen=snprintf(buffer, sizeof(buffer), "%lu",
474
+ 			       (unsigned long)(t2p->pdf_xrefcount + 1));
475
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
476
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
477
+-		buflen=sprintf(buffer, "%lu",
478
++		buflen=snprintf(buffer, sizeof(buffer), "%lu",
479
+ 			       (unsigned long)(t2p->pdf_xrefcount + 2));
480
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
481
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
482
+-		buflen=sprintf(buffer, "%lu",
483
++		buflen=snprintf(buffer, sizeof(buffer), "%lu",
484
+ 			       (unsigned long)(t2p->pdf_xrefcount + 3));
485
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
486
+ 		written += t2pWriteFile(output, (tdata_t) " 0 R ", 5);
487
+@@ -4821,7 +4803,7 @@
488
+ 	written += t2pWriteFile(output, (tdata_t) "/FunctionType 0 \n", 17);
489
+ 	written += t2pWriteFile(output, (tdata_t) "/Domain [0.0 1.0] \n", 19);
490
+ 	written += t2pWriteFile(output, (tdata_t) "/Range [0.0 1.0] \n", 18);
491
+-	buflen=sprintf(buffer, "/Size [%u] \n", (1<<t2p->tiff_bitspersample));
492
++	buflen=snprintf(buffer, sizeof(buffer), "/Size [%u] \n", (1<<t2p->tiff_bitspersample));
493
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
494
+ 	written += t2pWriteFile(output, (tdata_t) "/BitsPerSample 16 \n", 19);
495
+ 	written += t2p_write_pdf_stream_dict(((tsize_t)1)<<(t2p->tiff_bitspersample+1), 0, output);
496
+@@ -4848,7 +4830,7 @@
497
+ tsize_t t2p_write_pdf_xobject_calcs(T2P* t2p, TIFF* output){
498
+ 
499
+ 	tsize_t written=0;
500
+-	char buffer[128];
501
++	char buffer[256];
502
+ 	int buflen=0;
503
+ 	
504
+ 	float X_W=0.0;
505
+@@ -4916,16 +4898,16 @@
506
+ 	written += t2pWriteFile(output, (tdata_t) "<< \n", 4);
507
+ 	if(t2p->pdf_colorspace & T2P_CS_CALGRAY){
508
+ 		written += t2pWriteFile(output, (tdata_t) "/WhitePoint ", 12);
509
+-		buflen=sprintf(buffer, "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W);
510
++		buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W);
511
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
512
+ 		written += t2pWriteFile(output, (tdata_t) "/Gamma 2.2 \n", 12);
513
+ 	}
514
+ 	if(t2p->pdf_colorspace & T2P_CS_CALRGB){
515
+ 		written += t2pWriteFile(output, (tdata_t) "/WhitePoint ", 12);
516
+-		buflen=sprintf(buffer, "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W);
517
++		buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f] \n", X_W, Y_W, Z_W);
518
+ 		written += t2pWriteFile(output, (tdata_t) buffer, buflen);
519
+ 		written += t2pWriteFile(output, (tdata_t) "/Matrix ", 8);
520
+-		buflen=sprintf(buffer, "[%.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f] \n", 
521
++		buflen=snprintf(buffer, sizeof(buffer), "[%.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f] \n", 
522
+ 			X_R, Y_R, Z_R, 
523
+ 			X_G, Y_G, Z_G, 
524
+ 			X_B, Y_B, Z_B); 
525
+@@ -4944,11 +4926,11 @@
526
+ tsize_t t2p_write_pdf_xobject_icccs(T2P* t2p, TIFF* output){
527
+ 
528
+ 	tsize_t written=0;
529
+-	char buffer[16];
530
++	char buffer[32];
531
+ 	int buflen=0;
532
+ 	
533
+ 	written += t2pWriteFile(output, (tdata_t) "[/ICCBased ", 11);
534
+-	buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_icccs);
535
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_icccs);
536
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
537
+ 	written += t2pWriteFile(output, (tdata_t) " 0 R] \n", 7);
538
+ 
539
+@@ -4958,11 +4940,11 @@
540
+ tsize_t t2p_write_pdf_xobject_icccs_dict(T2P* t2p, TIFF* output){
541
+ 
542
+ 	tsize_t written=0;
543
+-	char buffer[16];
544
++	char buffer[32];
545
+ 	int buflen=0;
546
+ 	
547
+ 	written += t2pWriteFile(output, (tdata_t) "/N ", 3);
548
+-	buflen=sprintf(buffer, "%u \n", t2p->tiff_samplesperpixel);
549
++	buflen=snprintf(buffer, sizeof(buffer), "%u \n", t2p->tiff_samplesperpixel);
550
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
551
+ 	written += t2pWriteFile(output, (tdata_t) "/Alternate ", 11);
552
+ 	t2p->pdf_colorspace ^= T2P_CS_ICCBASED;
553
+@@ -5027,7 +5009,7 @@
554
+ tsize_t t2p_write_pdf_xobject_stream_filter(ttile_t tile, T2P* t2p, TIFF* output){
555
+ 
556
+ 	tsize_t written=0;
557
+-	char buffer[16];
558
++	char buffer[32];
559
+ 	int buflen=0;
560
+ 
561
+ 	if(t2p->pdf_compression==T2P_COMPRESS_NONE){
562
+@@ -5042,41 +5024,33 @@
563
+ 			written += t2pWriteFile(output, (tdata_t) "<< /K -1 ", 9);
564
+ 			if(tile==0){
565
+ 				written += t2pWriteFile(output, (tdata_t) "/Columns ", 9);
566
+-				buflen=sprintf(buffer, "%lu",
567
++				buflen=snprintf(buffer, sizeof(buffer), "%lu",
568
+ 					       (unsigned long)t2p->tiff_width);
569
+ 				written += t2pWriteFile(output, (tdata_t) buffer, buflen);
570
+ 				written += t2pWriteFile(output, (tdata_t) " /Rows ", 7);
571
+-				buflen=sprintf(buffer, "%lu",
572
++				buflen=snprintf(buffer, sizeof(buffer), "%lu",
573
+ 					       (unsigned long)t2p->tiff_length);
574
+ 				written += t2pWriteFile(output, (tdata_t) buffer, buflen);
575
+ 			} else {
576
+ 				if(t2p_tile_is_right_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)==0){
577
+ 					written += t2pWriteFile(output, (tdata_t) "/Columns ", 9);
578
+-					buflen=sprintf(
579
+-						buffer, 
580
+-						"%lu", 
581
++					buflen=snprintf(buffer, sizeof(buffer), "%lu",
582
+ 						(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilewidth);
583
+ 					written += t2pWriteFile(output, (tdata_t) buffer, buflen);
584
+ 				} else {
585
+ 					written += t2pWriteFile(output, (tdata_t) "/Columns ", 9);
586
+-					buflen=sprintf(
587
+-						buffer, 
588
+-						"%lu", 
589
++					buflen=snprintf(buffer, sizeof(buffer), "%lu",
590
+ 						(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilewidth);
591
+ 					written += t2pWriteFile(output, (tdata_t) buffer, buflen);
592
+ 				}
593
+ 				if(t2p_tile_is_bottom_edge(t2p->tiff_tiles[t2p->pdf_page], tile-1)==0){
594
+ 					written += t2pWriteFile(output, (tdata_t) " /Rows ", 7);
595
+-					buflen=sprintf(
596
+-						buffer, 
597
+-						"%lu", 
598
++					buflen=snprintf(buffer, sizeof(buffer), "%lu",
599
+ 						(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_tilelength);
600
+ 					written += t2pWriteFile(output, (tdata_t) buffer, buflen);
601
+ 				} else {
602
+ 					written += t2pWriteFile(output, (tdata_t) " /Rows ", 7);
603
+-					buflen=sprintf(
604
+-						buffer, 
605
+-						"%lu", 
606
++					buflen=snprintf(buffer, sizeof(buffer), "%lu",
607
+ 						(unsigned long)t2p->tiff_tiles[t2p->pdf_page].tiles_edgetilelength);
608
+ 					written += t2pWriteFile(output, (tdata_t) buffer, buflen);
609
+ 				}
610
+@@ -5103,21 +5077,17 @@
611
+ 			if(t2p->pdf_compressionquality%100){
612
+ 				written += t2pWriteFile(output, (tdata_t) "/DecodeParms ", 13);
613
+ 				written += t2pWriteFile(output, (tdata_t) "<< /Predictor ", 14);
614
+-				_TIFFmemset(buffer, 0x00, 16);
615
+-				buflen=sprintf(buffer, "%u", t2p->pdf_compressionquality%100);
616
++				buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->pdf_compressionquality%100);
617
+ 				written += t2pWriteFile(output, (tdata_t) buffer, buflen);
618
+ 				written += t2pWriteFile(output, (tdata_t) " /Columns ", 10);
619
+-				_TIFFmemset(buffer, 0x00, 16);
620
+-				buflen = sprintf(buffer, "%lu",
621
++				buflen = snprintf(buffer, sizeof(buffer), "%lu",
622
+ 						 (unsigned long)t2p->tiff_width);
623
+ 				written += t2pWriteFile(output, (tdata_t) buffer, buflen);
624
+ 				written += t2pWriteFile(output, (tdata_t) " /Colors ", 9);
625
+-				_TIFFmemset(buffer, 0x00, 16);
626
+-				buflen=sprintf(buffer, "%u", t2p->tiff_samplesperpixel);
627
++				buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->tiff_samplesperpixel);
628
+ 				written += t2pWriteFile(output, (tdata_t) buffer, buflen);
629
+ 				written += t2pWriteFile(output, (tdata_t) " /BitsPerComponent ", 19);
630
+-				_TIFFmemset(buffer, 0x00, 16);
631
+-				buflen=sprintf(buffer, "%u", t2p->tiff_bitspersample);
632
++				buflen=snprintf(buffer, sizeof(buffer), "%u", t2p->tiff_bitspersample);
633
+ 				written += t2pWriteFile(output, (tdata_t) buffer, buflen);
634
+ 				written += t2pWriteFile(output, (tdata_t) ">>\n", 3);
635
+ 			}
636
+@@ -5137,16 +5107,16 @@
637
+ tsize_t t2p_write_pdf_xreftable(T2P* t2p, TIFF* output){
638
+ 
639
+ 	tsize_t written=0;
640
+-	char buffer[21];
641
++	char buffer[64];
642
+ 	int buflen=0;
643
+ 	uint32 i=0;
644
+ 
645
+ 	written += t2pWriteFile(output, (tdata_t) "xref\n0 ", 7);
646
+-	buflen=sprintf(buffer, "%lu", (unsigned long)(t2p->pdf_xrefcount + 1));
647
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount + 1));
648
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
649
+ 	written += t2pWriteFile(output, (tdata_t) " \n0000000000 65535 f \n", 22);
650
+ 	for (i=0;i<t2p->pdf_xrefcount;i++){
651
+-		sprintf(buffer, "%.10lu 00000 n \n",
652
++		snprintf(buffer, sizeof(buffer), "%.10lu 00000 n \n",
653
+ 			(unsigned long)t2p->pdf_xrefoffsets[i]);
654
+ 		written += t2pWriteFile(output, (tdata_t) buffer, 20);
655
+ 	}
656
+@@ -5170,17 +5140,14 @@
657
+ 		snprintf(t2p->pdf_fileid + i, 9, "%.8X", rand());
658
+ 
659
+ 	written += t2pWriteFile(output, (tdata_t) "trailer\n<<\n/Size ", 17);
660
+-	buflen = sprintf(buffer, "%lu", (unsigned long)(t2p->pdf_xrefcount+1));
661
++	buflen = snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)(t2p->pdf_xrefcount+1));
662
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
663
+-	_TIFFmemset(buffer, 0x00, 32);	
664
+ 	written += t2pWriteFile(output, (tdata_t) "\n/Root ", 7);
665
+-	buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_catalog);
666
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_catalog);
667
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
668
+-	_TIFFmemset(buffer, 0x00, 32);	
669
+ 	written += t2pWriteFile(output, (tdata_t) " 0 R \n/Info ", 12);
670
+-	buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_info);
671
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_info);
672
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
673
+-	_TIFFmemset(buffer, 0x00, 32);	
674
+ 	written += t2pWriteFile(output, (tdata_t) " 0 R \n/ID[<", 11);
675
+ 	written += t2pWriteFile(output, (tdata_t) t2p->pdf_fileid,
676
+ 				sizeof(t2p->pdf_fileid) - 1);
677
+@@ -5188,9 +5155,8 @@
678
+ 	written += t2pWriteFile(output, (tdata_t) t2p->pdf_fileid,
679
+ 				sizeof(t2p->pdf_fileid) - 1);
680
+ 	written += t2pWriteFile(output, (tdata_t) ">]\n>>\nstartxref\n", 16);
681
+-	buflen=sprintf(buffer, "%lu", (unsigned long)t2p->pdf_startxref);
682
++	buflen=snprintf(buffer, sizeof(buffer), "%lu", (unsigned long)t2p->pdf_startxref);
683
+ 	written += t2pWriteFile(output, (tdata_t) buffer, buflen);
684
+-	_TIFFmemset(buffer, 0x00, 32);	
685
+ 	written += t2pWriteFile(output, (tdata_t) "\n%%EOF\n", 7);
686
+ 
687
+ 	return(written);
688
+Index: tiff-4.0.3/tools/tiff2ps.c
689
+===================================================================
690
+--- tiff-4.0.3.orig/tools/tiff2ps.c	2013-06-23 10:36:51.163629483 -0400
691
++++ tiff-4.0.3/tools/tiff2ps.c	2013-06-23 10:36:51.155629481 -0400
692
+@@ -1781,8 +1781,8 @@
693
+ 		imageOp = "imagemask";
694
+ 
695
+ 	(void)strcpy(im_x, "0");
696
+-	(void)sprintf(im_y, "%lu", (long) h);
697
+-	(void)sprintf(im_h, "%lu", (long) h);
698
++	(void)snprintf(im_y, sizeof(im_y), "%lu", (long) h);
699
++	(void)snprintf(im_h, sizeof(im_h), "%lu", (long) h);
700
+ 	tile_width = w;
701
+ 	tile_height = h;
702
+ 	if (TIFFIsTiled(tif)) {
703
+@@ -1803,7 +1803,7 @@
704
+ 		}
705
+ 		if (tile_height < h) {
706
+ 			fputs("/im_y 0 def\n", fd);
707
+-			(void)sprintf(im_y, "%lu im_y sub", (unsigned long) h);
708
++			(void)snprintf(im_y, sizeof(im_y), "%lu im_y sub", (unsigned long) h);
709
+ 		}
710
+ 	} else {
711
+ 		repeat_count = tf_numberstrips;
712
+@@ -1815,7 +1815,7 @@
713
+ 			fprintf(fd, "/im_h %lu def\n",
714
+ 			    (unsigned long) tile_height);
715
+ 			(void)strcpy(im_h, "im_h");
716
+-			(void)sprintf(im_y, "%lu im_y sub", (unsigned long) h);
717
++			(void)snprintf(im_y, sizeof(im_y), "%lu im_y sub", (unsigned long) h);
718
+ 		}
719
+ 	}
720
+ 
721
+Index: tiff-4.0.3/tools/tiffcrop.c
722
+===================================================================
723
+--- tiff-4.0.3.orig/tools/tiffcrop.c	2013-06-23 10:36:51.163629483 -0400
724
++++ tiff-4.0.3/tools/tiffcrop.c	2013-06-23 10:36:51.159629481 -0400
725
+@@ -2077,7 +2077,7 @@
726
+         return 1;
727
+         }
728
+ 
729
+-      sprintf (filenum, "-%03d%s", findex, export_ext);
730
++      snprintf(filenum, sizeof(filenum), "-%03d%s", findex, export_ext);
731
+       filenum[14] = '\0';
732
+       strncat (exportname, filenum, 15);
733
+       }
734
+@@ -2230,8 +2230,8 @@
735
+ 
736
+           /* dump.infilename is guaranteed to be NUL termimated and have 20 bytes 
737
+              fewer than PATH_MAX */ 
738
+-          memset (temp_filename, '\0', PATH_MAX + 1);              
739
+-          sprintf (temp_filename, "%s-read-%03d.%s", dump.infilename, dump_images,
740
++          snprintf(temp_filename, sizeof(temp_filename), "%s-read-%03d.%s",
741
++		   dump.infilename, dump_images,
742
+                   (dump.format == DUMP_TEXT) ? "txt" : "raw");
743
+           if ((dump.infile = fopen(temp_filename, dump.mode)) == NULL)
744
+             {
745
+@@ -2249,8 +2249,8 @@
746
+ 
747
+           /* dump.outfilename is guaranteed to be NUL termimated and have 20 bytes 
748
+              fewer than PATH_MAX */ 
749
+-          memset (temp_filename, '\0', PATH_MAX + 1);              
750
+-          sprintf (temp_filename, "%s-write-%03d.%s", dump.outfilename, dump_images,
751
++          snprintf(temp_filename, sizeof(temp_filename), "%s-write-%03d.%s",
752
++		   dump.outfilename, dump_images,
753
+                   (dump.format == DUMP_TEXT) ? "txt" : "raw");
754
+           if ((dump.outfile = fopen(temp_filename, dump.mode)) == NULL)
755
+             {
756
+Index: tiff-4.0.3/tools/tiff2bw.c
757
+===================================================================
758
+--- tiff-4.0.3.orig/tools/tiff2bw.c	2013-06-23 10:36:51.163629483 -0400
759
++++ tiff-4.0.3/tools/tiff2bw.c	2013-06-23 10:36:51.159629481 -0400
760
+@@ -205,7 +205,7 @@
761
+ 		}
762
+ 	}
763
+ 	TIFFSetField(out, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
764
+-	sprintf(thing, "B&W version of %s", argv[optind]);
765
++	snprintf(thing, sizeof(thing), "B&W version of %s", argv[optind]);
766
+ 	TIFFSetField(out, TIFFTAG_IMAGEDESCRIPTION, thing);
767
+ 	TIFFSetField(out, TIFFTAG_SOFTWARE, "tiff2bw");
768
+ 	outbuf = (unsigned char *)_TIFFmalloc(TIFFScanlineSize(out));

+ 17
- 0
libs/tiff/patches/013-CVE-2013-4231.patch View File

@@ -0,0 +1,17 @@
1
+Description: Buffer overflow in gif2tiff
2
+Bug: http://bugzilla.maptools.org/show_bug.cgi?id=2450
3
+Bug-Debian: http://bugs.debian.org/719303
4
+
5
+Index: tiff-4.0.3/tools/gif2tiff.c
6
+===================================================================
7
+--- tiff-4.0.3.orig/tools/gif2tiff.c	2013-08-22 11:46:11.960846910 -0400
8
++++ tiff-4.0.3/tools/gif2tiff.c	2013-08-22 11:46:11.956846910 -0400
9
+@@ -333,6 +333,8 @@
10
+     int status = 1;
11
+ 
12
+     datasize = getc(infile);
13
++    if (datasize > 12)
14
++	return 0;
15
+     clear = 1 << datasize;
16
+     eoi = clear + 1;
17
+     avail = clear + 2;

+ 18
- 0
libs/tiff/patches/014-CVE-2013-4232.patch View File

@@ -0,0 +1,18 @@
1
+Description: use after free in tiff2pdf
2
+Bug: http://bugzilla.maptools.org/show_bug.cgi?id=2449
3
+Bug-Debian: http://bugs.debian.org/719303
4
+
5
+Index: tiff-4.0.3/tools/tiff2pdf.c
6
+===================================================================
7
+--- tiff-4.0.3.orig/tools/tiff2pdf.c	2013-08-22 11:46:37.292847242 -0400
8
++++ tiff-4.0.3/tools/tiff2pdf.c	2013-08-22 11:46:37.292847242 -0400
9
+@@ -2461,7 +2461,8 @@
10
+ 					(unsigned long) t2p->tiff_datasize, 
11
+ 					TIFFFileName(input));
12
+ 				t2p->t2p_error = T2P_ERR_ERROR;
13
+-			  _TIFFfree(buffer);
14
++				_TIFFfree(buffer);
15
++				return(0);
16
+ 			} else {
17
+ 				buffer=samplebuffer;
18
+ 				t2p->tiff_datasize *= t2p->tiff_samplesperpixel;

+ 18
- 0
libs/tiff/patches/015-CVE-2013-4244.patch View File

@@ -0,0 +1,18 @@
1
+Description: OOB write in gif2tiff
2
+Bug-Redhat: https://bugzilla.redhat.com/show_bug.cgi?id=996468
3
+
4
+Index: tiff-4.0.3/tools/gif2tiff.c
5
+===================================================================
6
+--- tiff-4.0.3.orig/tools/gif2tiff.c	2013-08-24 11:17:13.546447901 -0400
7
++++ tiff-4.0.3/tools/gif2tiff.c	2013-08-24 11:17:13.546447901 -0400
8
+@@ -400,6 +400,10 @@
9
+     }
10
+ 
11
+     if (oldcode == -1) {
12
++        if (code >= clear) {
13
++            fprintf(stderr, "bad input: code=%d is larger than clear=%d\n",code, clear);
14
++            return 0;
15
++        }
16
+ 	*(*fill)++ = suffix[code];
17
+ 	firstchar = oldcode = code;
18
+ 	return 1;

+ 37
- 0
libs/tiff/patches/016-CVE-2013-4243.patch View File

@@ -0,0 +1,37 @@
1
+Index: tiff/tools/gif2tiff.c
2
+===================================================================
3
+--- tiff.orig/tools/gif2tiff.c
4
++++ tiff/tools/gif2tiff.c
5
+@@ -280,6 +280,10 @@ readgifimage(char* mode)
6
+         fprintf(stderr, "no colormap present for image\n");
7
+         return (0);
8
+     }
9
++    if (width == 0 || height == 0) {
10
++        fprintf(stderr, "Invalid value of width or height\n");
11
++        return(0);
12
++    }
13
+     if ((raster = (unsigned char*) _TIFFmalloc(width*height+EXTRAFUDGE)) == NULL) {
14
+         fprintf(stderr, "not enough memory for image\n");
15
+         return (0);
16
+@@ -404,6 +408,10 @@ process(register int code, unsigned char
17
+             fprintf(stderr, "bad input: code=%d is larger than clear=%d\n",code, clear);
18
+             return 0;
19
+         }
20
++        if (*fill >= raster + width*height) {
21
++            fprintf(stderr, "raster full before eoi code\n");
22
++            return 0;
23
++        }
24
+ 	*(*fill)++ = suffix[code];
25
+ 	firstchar = oldcode = code;
26
+ 	return 1;
27
+@@ -434,6 +442,10 @@ process(register int code, unsigned char
28
+     }
29
+     oldcode = incode;
30
+     do {
31
++        if (*fill >= raster + width*height) {
32
++            fprintf(stderr, "raster full before eoi code\n");
33
++            return 0;
34
++        }
35
+ 	*(*fill)++ = *--stackp;
36
+     } while (stackp > stack);
37
+     return 1;