| OLD | NEW |
| 1 | 1 |
| 2 /* pngtest.c - a simple test program to test libpng | 2 /* pngtest.c - a simple test program to test libpng |
| 3 * | 3 * |
| 4 * Last changed in libpng 1.5.25 [December 3, 2015] | 4 * Last changed in libpng 1.5.25 [December 3, 2015] |
| 5 * Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson | 5 * Copyright (c) 1998-2002,2004,2006-2015 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 |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 */ | 507 */ |
| 508 typedef struct memory_information | 508 typedef struct memory_information |
| 509 { | 509 { |
| 510 png_alloc_size_t size; | 510 png_alloc_size_t size; |
| 511 png_voidp pointer; | 511 png_voidp pointer; |
| 512 struct memory_information *next; | 512 struct memory_information *next; |
| 513 } memory_information; | 513 } memory_information; |
| 514 typedef memory_information *memory_infop; | 514 typedef memory_information *memory_infop; |
| 515 | 515 |
| 516 static memory_infop pinformation = NULL; | 516 static memory_infop pinformation = NULL; |
| 517 static int current_allocation = 0; | 517 static png_alloc_size_t current_allocation = 0; |
| 518 static int maximum_allocation = 0; | 518 static png_alloc_size_t maximum_allocation = 0; |
| 519 static int total_allocation = 0; | 519 static png_alloc_size_t total_allocation = 0; |
| 520 static int num_allocations = 0; | 520 static png_alloc_size_t num_allocations = 0; |
| 521 | 521 |
| 522 png_voidp PNGCBAPI png_debug_malloc PNGARG((png_structp png_ptr, | 522 png_voidp PNGCBAPI png_debug_malloc PNGARG((png_structp png_ptr, |
| 523 png_alloc_size_t size)); | 523 png_alloc_size_t size)); |
| 524 void PNGCBAPI png_debug_free PNGARG((png_structp png_ptr, png_voidp ptr)); | 524 void PNGCBAPI png_debug_free PNGARG((png_structp png_ptr, png_voidp ptr)); |
| 525 | 525 |
| 526 png_voidp | 526 png_voidp |
| 527 PNGCBAPI png_debug_malloc(png_structp png_ptr, png_alloc_size_t size) | 527 PNGCBAPI png_debug_malloc(png_structp png_ptr, png_alloc_size_t size) |
| 528 { | 528 { |
| 529 | 529 |
| 530 /* png_malloc has already tested for NULL; png_create_struct calls | 530 /* png_malloc has already tested for NULL; png_create_struct calls |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 597 { | 597 { |
| 598 memory_infop *ppinfo = &pinformation; | 598 memory_infop *ppinfo = &pinformation; |
| 599 | 599 |
| 600 for (;;) | 600 for (;;) |
| 601 { | 601 { |
| 602 memory_infop pinfo = *ppinfo; | 602 memory_infop pinfo = *ppinfo; |
| 603 | 603 |
| 604 if (pinfo->pointer == ptr) | 604 if (pinfo->pointer == ptr) |
| 605 { | 605 { |
| 606 *ppinfo = pinfo->next; | 606 *ppinfo = pinfo->next; |
| 607 current_allocation -= pinfo->size; | 607 if (current_allocation < pinfo->size) |
| 608 if (current_allocation < 0) | |
| 609 fprintf(STDERR, "Duplicate free of memory\n"); | 608 fprintf(STDERR, "Duplicate free of memory\n"); |
| 609 else |
| 610 current_allocation -= pinfo->size; |
| 610 /* We must free the list element too, but first kill | 611 /* We must free the list element too, but first kill |
| 611 the memory that is to be freed. */ | 612 the memory that is to be freed. */ |
| 612 memset(ptr, 0x55, pinfo->size); | 613 memset(ptr, 0x55, pinfo->size); |
| 613 free(pinfo); | 614 free(pinfo); |
| 614 pinfo = NULL; | 615 pinfo = NULL; |
| 615 break; | 616 break; |
| 616 } | 617 } |
| 617 | 618 |
| 618 if (pinfo->next == NULL) | 619 if (pinfo->next == NULL) |
| 619 { | 620 { |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 write_info_ptr = png_create_info_struct(write_ptr); | 932 write_info_ptr = png_create_info_struct(write_ptr); |
| 932 write_end_info_ptr = png_create_info_struct(write_ptr); | 933 write_end_info_ptr = png_create_info_struct(write_ptr); |
| 933 #endif | 934 #endif |
| 934 | 935 |
| 935 #ifdef PNG_READ_USER_CHUNKS_SUPPORTED | 936 #ifdef PNG_READ_USER_CHUNKS_SUPPORTED |
| 936 init_callback_info(read_info_ptr); | 937 init_callback_info(read_info_ptr); |
| 937 png_set_read_user_chunk_fn(read_ptr, &user_chunk_data, | 938 png_set_read_user_chunk_fn(read_ptr, &user_chunk_data, |
| 938 read_user_chunk_callback); | 939 read_user_chunk_callback); |
| 939 #endif | 940 #endif |
| 940 | 941 |
| 942 #ifdef PNG_SET_USER_LIMITS_SUPPORTED |
| 943 # ifdef CHUNK_LIMIT /* from the build, for testing */ |
| 944 png_set_chunk_malloc_max(read_ptr, CHUNK_LIMIT); |
| 945 # endif /* CHUNK_LIMIT */ |
| 946 #endif |
| 947 |
| 941 #ifdef PNG_SETJMP_SUPPORTED | 948 #ifdef PNG_SETJMP_SUPPORTED |
| 942 pngtest_debug("Setting jmpbuf for read struct"); | 949 pngtest_debug("Setting jmpbuf for read struct"); |
| 943 if (setjmp(png_jmpbuf(read_ptr))) | 950 if (setjmp(png_jmpbuf(read_ptr))) |
| 944 { | 951 { |
| 945 fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname); | 952 fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname); |
| 946 png_free(read_ptr, row_buf); | 953 png_free(read_ptr, row_buf); |
| 947 row_buf = NULL; | 954 row_buf = NULL; |
| 948 png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); | 955 png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); |
| 949 #ifdef PNG_WRITE_SUPPORTED | 956 #ifdef PNG_WRITE_SUPPORTED |
| 950 png_destroy_info_struct(write_ptr, &write_end_info_ptr); | 957 png_destroy_info_struct(write_ptr, &write_end_info_ptr); |
| (...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1867 " reads/writes one PNG file (without -m) or multiple files (-m)\n"); | 1874 " reads/writes one PNG file (without -m) or multiple files (-m)\n"); |
| 1868 fprintf(STDERR, | 1875 fprintf(STDERR, |
| 1869 " with -m %s is used as a temporary file\n", outname); | 1876 " with -m %s is used as a temporary file\n", outname); |
| 1870 exit(1); | 1877 exit(1); |
| 1871 } | 1878 } |
| 1872 | 1879 |
| 1873 if (multiple != 0) | 1880 if (multiple != 0) |
| 1874 { | 1881 { |
| 1875 int i; | 1882 int i; |
| 1876 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG | 1883 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG |
| 1877 int allocation_now = current_allocation; | 1884 png_alloc_size_t allocation_now = current_allocation; |
| 1878 #endif | 1885 #endif |
| 1879 for (i=2; i<argc; ++i) | 1886 for (i=2; i<argc; ++i) |
| 1880 { | 1887 { |
| 1881 int kerror; | 1888 int kerror; |
| 1882 fprintf(STDERR, "\n Testing %s:", argv[i]); | 1889 fprintf(STDERR, "\n Testing %s:", argv[i]); |
| 1883 #if PNG_DEBUG > 0 | 1890 #if PNG_DEBUG > 0 |
| 1884 fprintf(STDERR, "\n"); | 1891 fprintf(STDERR, "\n"); |
| 1885 #endif | 1892 #endif |
| 1886 kerror = test_one_file(argv[i], outname); | 1893 kerror = test_one_file(argv[i], outname); |
| 1887 if (kerror == 0) | 1894 if (kerror == 0) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1900 #endif /* TIME_RFC1123 */ | 1907 #endif /* TIME_RFC1123 */ |
| 1901 } | 1908 } |
| 1902 | 1909 |
| 1903 else | 1910 else |
| 1904 { | 1911 { |
| 1905 fprintf(STDERR, " FAIL\n"); | 1912 fprintf(STDERR, " FAIL\n"); |
| 1906 ierror += kerror; | 1913 ierror += kerror; |
| 1907 } | 1914 } |
| 1908 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG | 1915 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG |
| 1909 if (allocation_now != current_allocation) | 1916 if (allocation_now != current_allocation) |
| 1910 fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n", | 1917 fprintf(STDERR, "MEMORY ERROR: %lu bytes lost\n", |
| 1911 current_allocation - allocation_now); | 1918 (unsigned long)(current_allocation - allocation_now)); |
| 1912 | 1919 |
| 1913 if (current_allocation != 0) | 1920 if (current_allocation != 0) |
| 1914 { | 1921 { |
| 1915 memory_infop pinfo = pinformation; | 1922 memory_infop pinfo = pinformation; |
| 1916 | 1923 |
| 1917 fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n", | 1924 fprintf(STDERR, "MEMORY ERROR: %lu bytes still allocated\n", |
| 1918 current_allocation); | 1925 (unsigned long)current_allocation); |
| 1919 | 1926 |
| 1920 while (pinfo != NULL) | 1927 while (pinfo != NULL) |
| 1921 { | 1928 { |
| 1922 fprintf(STDERR, " %lu bytes at %p\n", | 1929 fprintf(STDERR, " %lu bytes at %p\n", |
| 1923 (unsigned long)pinfo->size, | 1930 (unsigned long)pinfo->size, |
| 1924 pinfo->pointer); | 1931 pinfo->pointer); |
| 1925 pinfo = pinfo->next; | 1932 pinfo = pinfo->next; |
| 1926 } | 1933 } |
| 1927 } | 1934 } |
| 1928 #endif | 1935 #endif |
| 1929 } | 1936 } |
| 1930 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG | 1937 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG |
| 1931 fprintf(STDERR, " Current memory allocation: %10d bytes\n", | 1938 fprintf(STDERR, " Current memory allocation: %20lu bytes\n", |
| 1932 current_allocation); | 1939 (unsigned long)current_allocation); |
| 1933 fprintf(STDERR, " Maximum memory allocation: %10d bytes\n", | 1940 fprintf(STDERR, " Maximum memory allocation: %20lu bytes\n", |
| 1934 maximum_allocation); | 1941 (unsigned long) maximum_allocation); |
| 1935 fprintf(STDERR, " Total memory allocation: %10d bytes\n", | 1942 fprintf(STDERR, " Total memory allocation: %20lu bytes\n", |
| 1936 total_allocation); | 1943 (unsigned long)total_allocation); |
| 1937 fprintf(STDERR, " Number of allocations: %10d\n", | 1944 fprintf(STDERR, " Number of allocations: %20lu\n", |
| 1938 num_allocations); | 1945 (unsigned long)num_allocations); |
| 1939 #endif | 1946 #endif |
| 1940 } | 1947 } |
| 1941 | 1948 |
| 1942 else | 1949 else |
| 1943 { | 1950 { |
| 1944 int i; | 1951 int i; |
| 1945 for (i = 0; i<3; ++i) | 1952 for (i = 0; i<3; ++i) |
| 1946 { | 1953 { |
| 1947 int kerror; | 1954 int kerror; |
| 1948 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG | 1955 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG |
| 1949 int allocation_now = current_allocation; | 1956 png_alloc_size_t allocation_now = current_allocation; |
| 1950 #endif | 1957 #endif |
| 1951 if (i == 1) | 1958 if (i == 1) |
| 1952 status_dots_requested = 1; | 1959 status_dots_requested = 1; |
| 1953 | 1960 |
| 1954 else if (verbose == 0) | 1961 else if (verbose == 0) |
| 1955 status_dots_requested = 0; | 1962 status_dots_requested = 0; |
| 1956 | 1963 |
| 1957 if (i == 0 || verbose == 1 || ierror != 0) | 1964 if (i == 0 || verbose == 1 || ierror != 0) |
| 1958 { | 1965 { |
| 1959 fprintf(STDERR, "\n Testing %s:", inname); | 1966 fprintf(STDERR, "\n Testing %s:", inname); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1989 #if PNG_DEBUG > 0 | 1996 #if PNG_DEBUG > 0 |
| 1990 fprintf(STDERR, "\n"); | 1997 fprintf(STDERR, "\n"); |
| 1991 #endif | 1998 #endif |
| 1992 } | 1999 } |
| 1993 | 2000 |
| 1994 fprintf(STDERR, " FAIL\n"); | 2001 fprintf(STDERR, " FAIL\n"); |
| 1995 ierror += kerror; | 2002 ierror += kerror; |
| 1996 } | 2003 } |
| 1997 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG | 2004 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG |
| 1998 if (allocation_now != current_allocation) | 2005 if (allocation_now != current_allocation) |
| 1999 fprintf(STDERR, "MEMORY ERROR: %d bytes lost\n", | 2006 fprintf(STDERR, "MEMORY ERROR: %lu bytes lost\n", |
| 2000 current_allocation - allocation_now); | 2007 (unsigned long)(current_allocation - allocation_now)); |
| 2001 | 2008 |
| 2002 if (current_allocation != 0) | 2009 if (current_allocation != 0) |
| 2003 { | 2010 { |
| 2004 memory_infop pinfo = pinformation; | 2011 memory_infop pinfo = pinformation; |
| 2005 | 2012 |
| 2006 fprintf(STDERR, "MEMORY ERROR: %d bytes still allocated\n", | 2013 fprintf(STDERR, "MEMORY ERROR: %lu bytes still allocated\n", |
| 2007 current_allocation); | 2014 (unsigned long)current_allocation); |
| 2008 | 2015 |
| 2009 while (pinfo != NULL) | 2016 while (pinfo != NULL) |
| 2010 { | 2017 { |
| 2011 fprintf(STDERR, " %lu bytes at %p\n", | 2018 fprintf(STDERR, " %lu bytes at %p\n", |
| 2012 (unsigned long)pinfo->size, pinfo->pointer); | 2019 (unsigned long)pinfo->size, pinfo->pointer); |
| 2013 pinfo = pinfo->next; | 2020 pinfo = pinfo->next; |
| 2014 } | 2021 } |
| 2015 } | 2022 } |
| 2016 #endif | 2023 #endif |
| 2017 } | 2024 } |
| 2018 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG | 2025 #if defined(PNG_USER_MEM_SUPPORTED) && PNG_DEBUG |
| 2019 fprintf(STDERR, " Current memory allocation: %10d bytes\n", | 2026 fprintf(STDERR, " Current memory allocation: %20lu bytes\n", |
| 2020 current_allocation); | 2027 (unsigned long)current_allocation); |
| 2021 fprintf(STDERR, " Maximum memory allocation: %10d bytes\n", | 2028 fprintf(STDERR, " Maximum memory allocation: %20lu bytes\n", |
| 2022 maximum_allocation); | 2029 (unsigned long)maximum_allocation); |
| 2023 fprintf(STDERR, " Total memory allocation: %10d bytes\n", | 2030 fprintf(STDERR, " Total memory allocation: %20lu bytes\n", |
| 2024 total_allocation); | 2031 (unsigned long)total_allocation); |
| 2025 fprintf(STDERR, " Number of allocations: %10d\n", | 2032 fprintf(STDERR, " Number of allocations: %20lu\n", |
| 2026 num_allocations); | 2033 (unsigned long)num_allocations); |
| 2027 #endif | 2034 #endif |
| 2028 } | 2035 } |
| 2029 | 2036 |
| 2030 #ifdef PNGTEST_TIMING | 2037 #ifdef PNGTEST_TIMING |
| 2031 t_stop = (float)clock(); | 2038 t_stop = (float)clock(); |
| 2032 t_misc += (t_stop - t_start); | 2039 t_misc += (t_stop - t_start); |
| 2033 t_start = t_stop; | 2040 t_start = t_stop; |
| 2034 fprintf(STDERR, " CPU time used = %.3f seconds", | 2041 fprintf(STDERR, " CPU time used = %.3f seconds", |
| 2035 (t_misc+t_decode+t_encode)/(float)CLOCKS_PER_SEC); | 2042 (t_misc+t_decode+t_encode)/(float)CLOCKS_PER_SEC); |
| 2036 fprintf(STDERR, " (decoding %.3f,\n", | 2043 fprintf(STDERR, " (decoding %.3f,\n", |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2073 { | 2080 { |
| 2074 fprintf(STDERR, | 2081 fprintf(STDERR, |
| 2075 " test ignored because libpng was not built with read support\n"); | 2082 " test ignored because libpng was not built with read support\n"); |
| 2076 /* And skip this test */ | 2083 /* And skip this test */ |
| 2077 return SKIP; | 2084 return SKIP; |
| 2078 } | 2085 } |
| 2079 #endif | 2086 #endif |
| 2080 | 2087 |
| 2081 /* Generate a compiler error if there is an old png.h in the search path. */ | 2088 /* Generate a compiler error if there is an old png.h in the search path. */ |
| 2082 typedef png_libpng_version_1_6_22 Your_png_h_is_not_version_1_6_22; | 2089 typedef png_libpng_version_1_6_22 Your_png_h_is_not_version_1_6_22; |
| OLD | NEW |