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

Side by Side Diff: third_party/libpng/pngrutil.c

Issue 2835021: Update libpng to version 1.2.44 (Closed)
Patch Set: Update to 1.2.44 Created 10 years, 5 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/libpng/pngread.c ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* pngrutil.c - utilities to read a PNG file 2 /* pngrutil.c - utilities to read a PNG file
3 * 3 *
4 * Last changed in libpng 1.2.43 [February 25, 2010] 4 * Last changed in libpng 1.2.44 [June 26, 2010]
5 * Copyright (c) 1998-2009 Glenn Randers-Pehrson 5 * Copyright (c) 1998-2010 Glenn Randers-Pehrson
6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 6 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 7 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
8 * 8 *
9 * This code is released under the libpng license. 9 * This code is released under the libpng license.
10 * For conditions of distribution and use, see the disclaimer 10 * For conditions of distribution and use, see the disclaimer
11 * and license in png.h 11 * and license in png.h
12 * 12 *
13 * This file contains routines that are only called from within 13 * This file contains routines that are only called from within
14 * libpng itself during the course of reading an image. 14 * libpng itself during the course of reading an image.
15 */ 15 */
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 inflateReset(&png_ptr->zstream); 264 inflateReset(&png_ptr->zstream);
265 265
266 if (ret == Z_STREAM_END) 266 if (ret == Z_STREAM_END)
267 return count; /* NOTE: may be zero. */ 267 return count; /* NOTE: may be zero. */
268 268
269 /* Now handle the error codes - the API always returns 0 269 /* Now handle the error codes - the API always returns 0
270 * and the error message is dumped into the uncompressed 270 * and the error message is dumped into the uncompressed
271 * buffer if available. 271 * buffer if available.
272 */ 272 */
273 { 273 {
274 char *msg, umsg[52]; 274 PNG_CONST char *msg;
275 if (png_ptr->zstream.msg != 0) 275 if (png_ptr->zstream.msg != 0)
276 msg = png_ptr->zstream.msg; 276 msg = png_ptr->zstream.msg;
277 else 277 else
278 { 278 {
279 #if defined(PNG_STDIO_SUPPORTED) && !defined(_WIN32_WCE) 279 #if defined(PNG_STDIO_SUPPORTED) && !defined(_WIN32_WCE)
280 char umsg[52];
281
280 switch (ret) 282 switch (ret)
281 { 283 {
282 case Z_BUF_ERROR: 284 case Z_BUF_ERROR:
283 msg = "Buffer error in compressed datastream in %s chunk"; 285 msg = "Buffer error in compressed datastream in %s chunk";
284 break; 286 break;
285 case Z_DATA_ERROR: 287 case Z_DATA_ERROR:
286 msg = "Data error in compressed datastream in %s chunk"; 288 msg = "Data error in compressed datastream in %s chunk";
287 break; 289 break;
288 default: 290 default:
289 msg = "Incomplete compressed datastream in %s chunk"; 291 msg = "Incomplete compressed datastream in %s chunk";
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
334 chunklength - prefix_size, 336 chunklength - prefix_size,
335 0/*output*/, 0/*output size*/); 337 0/*output*/, 0/*output size*/);
336 338
337 /* Now check the limits on this chunk - if the limit fails the 339 /* Now check the limits on this chunk - if the limit fails the
338 * compressed data will be removed, the prefix will remain. 340 * compressed data will be removed, the prefix will remain.
339 */ 341 */
340 #ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED 342 #ifdef PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
341 if (png_ptr->user_chunk_malloc_max && 343 if (png_ptr->user_chunk_malloc_max &&
342 (prefix_size + expanded_size >= png_ptr->user_chunk_malloc_max - 1)) 344 (prefix_size + expanded_size >= png_ptr->user_chunk_malloc_max - 1))
343 #else 345 #else
346 #ifdef PNG_USER_CHUNK_MALLOC_MAX
344 if ((PNG_USER_CHUNK_MALLOC_MAX > 0) && 347 if ((PNG_USER_CHUNK_MALLOC_MAX > 0) &&
345 prefix_size + expanded_size >= PNG_USER_CHUNK_MALLOC_MAX - 1) 348 prefix_size + expanded_size >= PNG_USER_CHUNK_MALLOC_MAX - 1)
346 #endif 349 #endif
350 #endif
347 png_warning(png_ptr, "Exceeded size limit while expanding chunk"); 351 png_warning(png_ptr, "Exceeded size limit while expanding chunk");
348 352
349 /* If the size is zero either there was an error and a message 353 /* If the size is zero either there was an error and a message
350 * has already been output (warning) or the size really is zero 354 * has already been output (warning) or the size really is zero
351 * and we have nothing to do - the code will exit through the 355 * and we have nothing to do - the code will exit through the
352 * error case below. 356 * error case below.
353 */ 357 */
354 else if (expanded_size > 0) 358 #if defined(PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED) || \
359 defined(PNG_USER_CHUNK_MALLOC_MAX)
360 else
361 #endif
362 if (expanded_size > 0
355 { 363 {
356 /* Success (maybe) - really uncompress the chunk. */ 364 /* Success (maybe) - really uncompress the chunk. */
357 png_size_t new_size = 0; 365 png_size_t new_size = 0;
358 png_charp text = png_malloc_warn(png_ptr, 366 png_charp text = png_malloc_warn(png_ptr,
359 prefix_size + expanded_size + 1); 367 prefix_size + expanded_size + 1);
360 368
361 if (text != NULL) 369 if (text != NULL)
362 { 370 {
363 png_memcpy(text, png_ptr->chunkdata, prefix_size); 371 png_memcpy(text, png_ptr->chunkdata, prefix_size);
364 new_size = png_inflate(png_ptr, 372 new_size = png_inflate(png_ptr,
(...skipping 13 matching lines...) Expand all
378 png_warning(png_ptr, "png_inflate logic error"); 386 png_warning(png_ptr, "png_inflate logic error");
379 png_free(png_ptr, text); 387 png_free(png_ptr, text);
380 } 388 }
381 else 389 else
382 png_warning(png_ptr, "Not enough memory to decompress chunk."); 390 png_warning(png_ptr, "Not enough memory to decompress chunk.");
383 } 391 }
384 } 392 }
385 393
386 else /* if (comp_type != PNG_COMPRESSION_TYPE_BASE) */ 394 else /* if (comp_type != PNG_COMPRESSION_TYPE_BASE) */
387 { 395 {
396 #if defined(PNG_STDIO_SUPPORTED) && !defined(_WIN32_WCE)
388 char umsg[50]; 397 char umsg[50];
389 398
390 #if defined(PNG_STDIO_SUPPORTED) && !defined(_WIN32_WCE) 399 png_snprintf(umsg, sizeof umsg, "Unknown zTXt compression type %d",
391 png_snprintf(umsg, sizeof umsg, "Unknown zTXt compression type %d", comp_t ype); 400 comp_type);
392 png_warning(png_ptr, umsg); 401 png_warning(png_ptr, umsg);
393 #else 402 #else
394 png_warning(png_ptr, "Unknown zTXt compression type"); 403 png_warning(png_ptr, "Unknown zTXt compression type");
395 #endif 404 #endif
396 405
397 /* The recovery is to simply drop the data. */ 406 /* The recovery is to simply drop the data. */
398 } 407 }
399 408
400 /* Generic error return - leave the prefix, delete the compressed 409 /* Generic error return - leave the prefix, delete the compressed
401 * data, reallocate the chunkdata to remove the potentially large 410 * data, reallocate the chunkdata to remove the potentially large
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 png_warning(png_ptr, 909 png_warning(png_ptr,
901 "Ignoring incorrect cHRM value when sRGB is also present"); 910 "Ignoring incorrect cHRM value when sRGB is also present");
902 #ifdef PNG_CONSOLE_IO_SUPPORTED 911 #ifdef PNG_CONSOLE_IO_SUPPORTED
903 #ifdef PNG_FLOATING_POINT_SUPPORTED 912 #ifdef PNG_FLOATING_POINT_SUPPORTED
904 fprintf(stderr, "wx=%f, wy=%f, rx=%f, ry=%f\n", 913 fprintf(stderr, "wx=%f, wy=%f, rx=%f, ry=%f\n",
905 white_x, white_y, red_x, red_y); 914 white_x, white_y, red_x, red_y);
906 fprintf(stderr, "gx=%f, gy=%f, bx=%f, by=%f\n", 915 fprintf(stderr, "gx=%f, gy=%f, bx=%f, by=%f\n",
907 green_x, green_y, blue_x, blue_y); 916 green_x, green_y, blue_x, blue_y);
908 #else 917 #else
909 fprintf(stderr, "wx=%ld, wy=%ld, rx=%ld, ry=%ld\n", 918 fprintf(stderr, "wx=%ld, wy=%ld, rx=%ld, ry=%ld\n",
910 int_x_white, int_y_white, int_x_red, int_y_red); 919 (long)int_x_white, (long)int_y_white,
920 (long)int_x_red, (long)int_y_red);
911 fprintf(stderr, "gx=%ld, gy=%ld, bx=%ld, by=%ld\n", 921 fprintf(stderr, "gx=%ld, gy=%ld, bx=%ld, by=%ld\n",
912 int_x_green, int_y_green, int_x_blue, int_y_blue); 922 (long)int_x_green, (long)int_y_green,
923 (long)int_x_blue, (long)int_y_blue);
913 #endif 924 #endif
914 #endif /* PNG_CONSOLE_IO_SUPPORTED */ 925 #endif /* PNG_CONSOLE_IO_SUPPORTED */
915 } 926 }
916 return; 927 return;
917 } 928 }
918 #endif /* PNG_READ_sRGB_SUPPORTED */ 929 #endif /* PNG_READ_sRGB_SUPPORTED */
919 930
920 #ifdef PNG_FLOATING_POINT_SUPPORTED 931 #ifdef PNG_FLOATING_POINT_SUPPORTED
921 png_set_cHRM(png_ptr, info_ptr, 932 png_set_cHRM(png_ptr, info_ptr,
922 white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y); 933 white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y);
(...skipping 877 matching lines...) Expand 10 before | Expand all | Expand 10 after
1800 png_crc_finish(png_ptr, length); 1811 png_crc_finish(png_ptr, length);
1801 return; 1812 return;
1802 } 1813 }
1803 1814
1804 png_debug1(2, "Allocating and reading sCAL chunk data (%lu bytes)", 1815 png_debug1(2, "Allocating and reading sCAL chunk data (%lu bytes)",
1805 length + 1); 1816 length + 1);
1806 png_ptr->chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1); 1817 png_ptr->chunkdata = (png_charp)png_malloc_warn(png_ptr, length + 1);
1807 if (png_ptr->chunkdata == NULL) 1818 if (png_ptr->chunkdata == NULL)
1808 { 1819 {
1809 png_warning(png_ptr, "Out of memory while processing sCAL chunk"); 1820 png_warning(png_ptr, "Out of memory while processing sCAL chunk");
1821 png_crc_finish(png_ptr, length);
1810 return; 1822 return;
1811 } 1823 }
1812 slength = (png_size_t)length; 1824 slength = (png_size_t)length;
1813 png_crc_read(png_ptr, (png_bytep)png_ptr->chunkdata, slength); 1825 png_crc_read(png_ptr, (png_bytep)png_ptr->chunkdata, slength);
1814 1826
1815 if (png_crc_finish(png_ptr, 0)) 1827 if (png_crc_finish(png_ptr, 0))
1816 { 1828 {
1817 png_free(png_ptr, png_ptr->chunkdata); 1829 png_free(png_ptr, png_ptr->chunkdata);
1818 png_ptr->chunkdata = NULL; 1830 png_ptr->chunkdata = NULL;
1819 return; 1831 return;
1820 } 1832 }
1821 1833
1822 png_ptr->chunkdata[slength] = 0x00; /* Null terminate the last string */ 1834 png_ptr->chunkdata[slength] = 0x00; /* Null terminate the last string */
1823 1835
1824 ep = png_ptr->chunkdata + 1; /* Skip unit byte */ 1836 ep = png_ptr->chunkdata + 1; /* Skip unit byte */
1825 1837
1826 #ifdef PNG_FLOATING_POINT_SUPPORTED 1838 #ifdef PNG_FLOATING_POINT_SUPPORTED
1827 width = png_strtod(png_ptr, ep, &vp); 1839 width = png_strtod(png_ptr, ep, &vp);
1828 if (*vp) 1840 if (*vp)
1829 { 1841 {
1830 png_warning(png_ptr, "malformed width string in sCAL chunk"); 1842 png_warning(png_ptr, "malformed width string in sCAL chunk");
1843 png_free(png_ptr, png_ptr->chunkdata);
1844 png_ptr->chunkdata = NULL;
1831 return; 1845 return;
1832 } 1846 }
1833 #else 1847 #else
1834 #ifdef PNG_FIXED_POINT_SUPPORTED 1848 #ifdef PNG_FIXED_POINT_SUPPORTED
1835 swidth = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); 1849 swidth = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1);
1836 if (swidth == NULL) 1850 if (swidth == NULL)
1837 { 1851 {
1838 png_warning(png_ptr, "Out of memory while processing sCAL chunk width"); 1852 png_warning(png_ptr, "Out of memory while processing sCAL chunk width");
1839 return; 1853 return;
1840 } 1854 }
1841 png_memcpy(swidth, ep, (png_size_t)png_strlen(ep)); 1855 png_memcpy(swidth, ep, (png_size_t)png_strlen(ep));
1842 #endif 1856 #endif
1843 #endif 1857 #endif
1844 1858
1845 for (ep = png_ptr->chunkdata; *ep; ep++) 1859 for (ep = png_ptr->chunkdata; *ep; ep++)
1846 /* Empty loop */ ; 1860 /* Empty loop */ ;
1847 ep++; 1861 ep++;
1848 1862
1849 if (png_ptr->chunkdata + slength < ep) 1863 if (png_ptr->chunkdata + slength < ep)
1850 { 1864 {
1851 png_warning(png_ptr, "Truncated sCAL chunk"); 1865 png_warning(png_ptr, "Truncated sCAL chunk");
1852 #if defined(PNG_FIXED_POINT_SUPPORTED) && \ 1866 #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
1853 !defined(PNG_FLOATING_POINT_SUPPORTED)
1854 png_free(png_ptr, swidth); 1867 png_free(png_ptr, swidth);
1855 #endif 1868 #endif
1856 png_free(png_ptr, png_ptr->chunkdata); 1869 png_free(png_ptr, png_ptr->chunkdata);
1857 png_ptr->chunkdata = NULL; 1870 png_ptr->chunkdata = NULL;
1858 return; 1871 return;
1859 } 1872 }
1860 1873
1861 #ifdef PNG_FLOATING_POINT_SUPPORTED 1874 #ifdef PNG_FLOATING_POINT_SUPPORTED
1862 height = png_strtod(png_ptr, ep, &vp); 1875 height = png_strtod(png_ptr, ep, &vp);
1863 if (*vp) 1876 if (*vp)
1864 { 1877 {
1865 png_warning(png_ptr, "malformed height string in sCAL chunk"); 1878 png_warning(png_ptr, "malformed height string in sCAL chunk");
1879 png_free(png_ptr, png_ptr->chunkdata);
1880 png_ptr->chunkdata = NULL;
1881 #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
1882 png_free(png_ptr, swidth);
1883 #endif
1866 return; 1884 return;
1867 } 1885 }
1868 #else 1886 #else
1869 #ifdef PNG_FIXED_POINT_SUPPORTED 1887 #ifdef PNG_FIXED_POINT_SUPPORTED
1870 sheight = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1); 1888 sheight = (png_charp)png_malloc_warn(png_ptr, png_strlen(ep) + 1);
1871 if (sheight == NULL) 1889 if (sheight == NULL)
1872 { 1890 {
1873 png_warning(png_ptr, "Out of memory while processing sCAL chunk height"); 1891 png_warning(png_ptr, "Out of memory while processing sCAL chunk height");
1892 png_free(png_ptr, png_ptr->chunkdata);
1893 png_ptr->chunkdata = NULL;
1894 #if defined(PNG_FIXED_POINT_SUPPORTED) && !defined(PNG_FLOATING_POINT_SUPPORTED)
1895 png_free(png_ptr, swidth);
1896 #endif
1874 return; 1897 return;
1875 } 1898 }
1876 png_memcpy(sheight, ep, (png_size_t)png_strlen(ep)); 1899 png_memcpy(sheight, ep, (png_size_t)png_strlen(ep));
1877 #endif 1900 #endif
1878 #endif 1901 #endif
1879 1902
1880 if (png_ptr->chunkdata + slength < ep 1903 if (png_ptr->chunkdata + slength < ep
1881 #ifdef PNG_FLOATING_POINT_SUPPORTED 1904 #ifdef PNG_FLOATING_POINT_SUPPORTED
1882 || width <= 0. || height <= 0. 1905 || width <= 0. || height <= 0.
1883 #endif 1906 #endif
(...skipping 1464 matching lines...) Expand 10 before | Expand all | Expand 10 after
3348 png_debug1(3, "height = %lu,", png_ptr->height); 3371 png_debug1(3, "height = %lu,", png_ptr->height);
3349 png_debug1(3, "iwidth = %lu,", png_ptr->iwidth); 3372 png_debug1(3, "iwidth = %lu,", png_ptr->iwidth);
3350 png_debug1(3, "num_rows = %lu,", png_ptr->num_rows); 3373 png_debug1(3, "num_rows = %lu,", png_ptr->num_rows);
3351 png_debug1(3, "rowbytes = %lu,", png_ptr->rowbytes); 3374 png_debug1(3, "rowbytes = %lu,", png_ptr->rowbytes);
3352 png_debug1(3, "irowbytes = %lu", 3375 png_debug1(3, "irowbytes = %lu",
3353 PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->iwidth) + 1); 3376 PNG_ROWBYTES(png_ptr->pixel_depth, png_ptr->iwidth) + 1);
3354 3377
3355 png_ptr->flags |= PNG_FLAG_ROW_INIT; 3378 png_ptr->flags |= PNG_FLAG_ROW_INIT;
3356 } 3379 }
3357 #endif /* PNG_READ_SUPPORTED */ 3380 #endif /* PNG_READ_SUPPORTED */
OLDNEW
« no previous file with comments | « third_party/libpng/pngread.c ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698