Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: third_party/libtiff/tif_write.c

Issue 1563103002: XFA: Upgrade to libtiff 4.0.6. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: rename to libtiff Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « third_party/libtiff/tif_warning.c ('k') | third_party/libtiff/tif_zip.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* $Id: tif_write.c,v 1.37 2012-08-13 22:10:17 fwarmerdam Exp $ */ 1 /* $Id: tif_write.c,v 1.42 2015-06-07 23:00:23 bfriesen Exp $ */
2 2
3 /* 3 /*
4 * Copyright (c) 1988-1997 Sam Leffler 4 * Copyright (c) 1988-1997 Sam Leffler
5 * Copyright (c) 1991-1997 Silicon Graphics, Inc. 5 * Copyright (c) 1991-1997 Silicon Graphics, Inc.
6 * 6 *
7 * Permission to use, copy, modify, distribute, and sell this software and 7 * Permission to use, copy, modify, distribute, and sell this software and
8 * its documentation for any purpose is hereby granted without fee, provided 8 * its documentation for any purpose is hereby granted without fee, provided
9 * that (i) the above copyright notices and this permission notice appear in 9 * that (i) the above copyright notices and this permission notice appear in
10 * all copies of the software and related documentation, and (ii) the names of 10 * all copies of the software and related documentation, and (ii) the names of
11 * Sam Leffler and Silicon Graphics may not be used in any advertising or 11 * Sam Leffler and Silicon Graphics may not be used in any advertising or
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 return (-1); 108 return (-1);
109 tif->tif_curstrip = strip; 109 tif->tif_curstrip = strip;
110 /* 110 /*
111 * Watch out for a growing image. The value of strips/image 111 * Watch out for a growing image. The value of strips/image
112 * will initially be 1 (since it can't be deduced until the 112 * will initially be 1 (since it can't be deduced until the
113 * imagelength is known). 113 * imagelength is known).
114 */ 114 */
115 if (strip >= td->td_stripsperimage && imagegrew) 115 if (strip >= td->td_stripsperimage && imagegrew)
116 td->td_stripsperimage = 116 td->td_stripsperimage =
117 TIFFhowmany_32(td->td_imagelength,td->td_rowsperstri p); 117 TIFFhowmany_32(td->td_imagelength,td->td_rowsperstri p);
118 if (td->td_stripsperimage == 0) {
119 TIFFErrorExt(tif->tif_clientdata, module, "Zero strips p er image");
120 return (-1);
121 }
118 tif->tif_row = 122 tif->tif_row =
119 (strip % td->td_stripsperimage) * td->td_rowsperstrip; 123 (strip % td->td_stripsperimage) * td->td_rowsperstrip;
120 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { 124 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
121 if (!(*tif->tif_setupencode)(tif)) 125 if (!(*tif->tif_setupencode)(tif))
122 return (-1); 126 return (-1);
123 tif->tif_flags |= TIFF_CODERSETUP; 127 tif->tif_flags |= TIFF_CODERSETUP;
124 } 128 }
125 129
126 tif->tif_rawcc = 0; 130 tif->tif_rawcc = 0;
127 tif->tif_rawcp = tif->tif_rawdata; 131 tif->tif_rawcp = tif->tif_rawdata;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 * Handle delayed allocation of data buffer. This 217 * Handle delayed allocation of data buffer. This
214 * permits it to be sized according to the directory 218 * permits it to be sized according to the directory
215 * info. 219 * info.
216 */ 220 */
217 if (!BUFFERCHECK(tif)) 221 if (!BUFFERCHECK(tif))
218 return ((tmsize_t) -1); 222 return ((tmsize_t) -1);
219 223
220 tif->tif_flags |= TIFF_BUF4WRITE; 224 tif->tif_flags |= TIFF_BUF4WRITE;
221 tif->tif_curstrip = strip; 225 tif->tif_curstrip = strip;
222 226
227 if (td->td_stripsperimage == 0) {
228 TIFFErrorExt(tif->tif_clientdata, module, "Zero strips per image ");
229 return ((tmsize_t) -1);
230 }
231
223 tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; 232 tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip;
224 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { 233 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
225 if (!(*tif->tif_setupencode)(tif)) 234 if (!(*tif->tif_setupencode)(tif))
226 return ((tmsize_t) -1); 235 return ((tmsize_t) -1);
227 tif->tif_flags |= TIFF_CODERSETUP; 236 tif->tif_flags |= TIFF_CODERSETUP;
228 } 237 }
229 238
230 if( td->td_stripbytecount[strip] > 0 ) 239 if( td->td_stripbytecount[strip] > 0 )
231 { 240 {
232 /* Make sure that at the first attempt of rewriting the tile, we wil l have */ 241 /* Make sure that at the first attempt of rewriting the tile, we wil l have */
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 * strips/image will initially be 1 (since it 313 * strips/image will initially be 1 (since it
305 * can't be deduced until the imagelength is known). 314 * can't be deduced until the imagelength is known).
306 */ 315 */
307 if (strip >= td->td_stripsperimage) 316 if (strip >= td->td_stripsperimage)
308 td->td_stripsperimage = 317 td->td_stripsperimage =
309 TIFFhowmany_32(td->td_imagelength,td->td_rowsperstri p); 318 TIFFhowmany_32(td->td_imagelength,td->td_rowsperstri p);
310 if (!TIFFGrowStrips(tif, 1, module)) 319 if (!TIFFGrowStrips(tif, 1, module))
311 return ((tmsize_t) -1); 320 return ((tmsize_t) -1);
312 } 321 }
313 tif->tif_curstrip = strip; 322 tif->tif_curstrip = strip;
323 if (td->td_stripsperimage == 0) {
324 TIFFErrorExt(tif->tif_clientdata, module,"Zero strips per image" );
325 return ((tmsize_t) -1);
326 }
314 tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip; 327 tif->tif_row = (strip % td->td_stripsperimage) * td->td_rowsperstrip;
315 return (TIFFAppendToStrip(tif, strip, (uint8*) data, cc) ? 328 return (TIFFAppendToStrip(tif, strip, (uint8*) data, cc) ?
316 cc : (tmsize_t) -1); 329 cc : (tmsize_t) -1);
317 } 330 }
318 331
319 /* 332 /*
320 * Write and compress a tile of data. The 333 * Write and compress a tile of data. The
321 * tile is selected by the (x,y,z,s) coordinates. 334 * tile is selected by the (x,y,z,s) coordinates.
322 */ 335 */
323 tmsize_t 336 tmsize_t
(...skipping 22 matching lines...) Expand all
346 * NB: Image length must be setup before writing; this 359 * NB: Image length must be setup before writing; this
347 * interface does not support automatically growing 360 * interface does not support automatically growing
348 * the image on each write (as TIFFWriteScanline does). 361 * the image on each write (as TIFFWriteScanline does).
349 */ 362 */
350 tmsize_t 363 tmsize_t
351 TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc) 364 TIFFWriteEncodedTile(TIFF* tif, uint32 tile, void* data, tmsize_t cc)
352 { 365 {
353 static const char module[] = "TIFFWriteEncodedTile"; 366 static const char module[] = "TIFFWriteEncodedTile";
354 TIFFDirectory *td; 367 TIFFDirectory *td;
355 uint16 sample; 368 uint16 sample;
369 uint32 howmany32;
356 370
357 if (!WRITECHECKTILES(tif, module)) 371 if (!WRITECHECKTILES(tif, module))
358 return ((tmsize_t)(-1)); 372 return ((tmsize_t)(-1));
359 td = &tif->tif_dir; 373 td = &tif->tif_dir;
360 if (tile >= td->td_nstrips) { 374 if (tile >= td->td_nstrips) {
361 TIFFErrorExt(tif->tif_clientdata, module, "Tile %lu out of range , max %lu", 375 TIFFErrorExt(tif->tif_clientdata, module, "Tile %lu out of range , max %lu",
362 (unsigned long) tile, (unsigned long) td->td_nstrips); 376 (unsigned long) tile, (unsigned long) td->td_nstrips);
363 return ((tmsize_t)(-1)); 377 return ((tmsize_t)(-1));
364 } 378 }
365 /* 379 /*
366 * Handle delayed allocation of data buffer. This 380 * Handle delayed allocation of data buffer. This
367 * permits it to be sized more intelligently (using 381 * permits it to be sized more intelligently (using
368 * directory information). 382 * directory information).
369 */ 383 */
370 if (!BUFFERCHECK(tif)) 384 if (!BUFFERCHECK(tif))
371 return ((tmsize_t)(-1)); 385 return ((tmsize_t)(-1));
372 386
373 tif->tif_flags |= TIFF_BUF4WRITE; 387 tif->tif_flags |= TIFF_BUF4WRITE;
374 tif->tif_curtile = tile; 388 tif->tif_curtile = tile;
375 389
376 if( td->td_stripbytecount[tile] > 0 ) 390 if( td->td_stripbytecount[tile] > 0 )
377 { 391 {
378 /* Make sure that at the first attempt of rewriting the tile, we wil l have */ 392 /* Make sure that at the first attempt of rewriting the tile, we wil l have */
379 /* more bytes available in the output buffer than the previous byte count, */ 393 /* more bytes available in the output buffer than the previous byte count, */
380 /* so that TIFFAppendToStrip() will detect the overflow when it is c alled the first */ 394 /* so that TIFFAppendToStrip() will detect the overflow when it is c alled the first */
381 /* time if the new compressed tile is bigger than the older one. (GD AL #4771) */ 395 /* time if the new compressed tile is bigger than the older one. (GD AL #4771) */
382 if( tif->tif_rawdatasize <= (tmsize_t)td->td_stripbytecount[tile] ) 396 if( tif->tif_rawdatasize <= (tmsize_t) td->td_stripbytecount[tile] )
383 { 397 {
384 if( !(TIFFWriteBufferSetup(tif, NULL, 398 if( !(TIFFWriteBufferSetup(tif, NULL,
385 (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[tile ] + 1), 1024))) ) 399 (tmsize_t)TIFFroundup_64((uint64)(td->td_stripbytecount[tile ] + 1), 1024))) )
386 return ((tmsize_t)(-1)); 400 return ((tmsize_t)(-1));
387 } 401 }
388 402
389 /* Force TIFFAppendToStrip() to consider placing data at end 403 /* Force TIFFAppendToStrip() to consider placing data at end
390 of file. */ 404 of file. */
391 tif->tif_curoff = 0; 405 tif->tif_curoff = 0;
392 } 406 }
393 407
394 tif->tif_rawcc = 0; 408 » tif->tif_rawcc = 0;
395 tif->tif_rawcp = tif->tif_rawdata; 409 » tif->tif_rawcp = tif->tif_rawdata;
396 410
397 /* 411 /*
398 * Compute tiles per row & per column to compute 412 * Compute tiles per row & per column to compute
399 * current row and column 413 * current row and column
400 */ 414 */
401 » tif->tif_row = (tile % TIFFhowmany_32(td->td_imagelength, td->td_tilelen gth)) 415 howmany32=TIFFhowmany_32(td->td_imagelength, td->td_tilelength);
402 » » * td->td_tilelength; 416 if (howmany32 == 0) {
403 » tif->tif_col = (tile % TIFFhowmany_32(td->td_imagewidth, td->td_tilewidt h)) 417 TIFFErrorExt(tif->tif_clientdata,module,"Zero tiles");
404 » » * td->td_tilewidth; 418 return ((tmsize_t)(-1));
419 }
420 » tif->tif_row = (tile % howmany32) * td->td_tilelength;
421 howmany32=TIFFhowmany_32(td->td_imagewidth, td->td_tilewidth);
422 if (howmany32 == 0) {
423 TIFFErrorExt(tif->tif_clientdata,module,"Zero tiles");
424 return ((tmsize_t)(-1));
425 }
426 » tif->tif_col = (tile % howmany32) * td->td_tilewidth;
405 427
406 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) { 428 if ((tif->tif_flags & TIFF_CODERSETUP) == 0) {
407 if (!(*tif->tif_setupencode)(tif)) 429 if (!(*tif->tif_setupencode)(tif))
408 return ((tmsize_t)(-1)); 430 return ((tmsize_t)(-1));
409 tif->tif_flags |= TIFF_CODERSETUP; 431 tif->tif_flags |= TIFF_CODERSETUP;
410 } 432 }
411 tif->tif_flags &= ~TIFF_POSTENCODE; 433 tif->tif_flags &= ~TIFF_POSTENCODE;
412 sample = (uint16)(tile/td->td_stripsperimage); 434 sample = (uint16)(tile/td->td_stripsperimage);
413 if (!(*tif->tif_preencode)(tif, sample)) 435 if (!(*tif->tif_preencode)(tif, sample))
414 return ((tmsize_t)(-1)); 436 return ((tmsize_t)(-1));
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 } 784 }
763 785
764 /* vim: set ts=8 sts=8 sw=8 noet: */ 786 /* vim: set ts=8 sts=8 sw=8 noet: */
765 /* 787 /*
766 * Local Variables: 788 * Local Variables:
767 * mode: c 789 * mode: c
768 * c-basic-offset: 8 790 * c-basic-offset: 8
769 * fill-column: 78 791 * fill-column: 78
770 * End: 792 * End:
771 */ 793 */
772
OLDNEW
« no previous file with comments | « third_party/libtiff/tif_warning.c ('k') | third_party/libtiff/tif_zip.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698