diff options
Diffstat (limited to 'example_png_info.cpp')
| -rw-r--r-- | example_png_info.cpp | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/example_png_info.cpp b/example_png_info.cpp index afd845c..d9112b6 100644 --- a/example_png_info.cpp +++ b/example_png_info.cpp @@ -100,7 +100,7 @@ Display the names and sizes of all chunks in the PNG file.  void displayChunkNames(const std::vector<unsigned char>& buffer)  {    // Listing chunks is based on the original file, not the decoded png info. -  const unsigned char *chunk, *begin, *end; +  const unsigned char *chunk, *begin, *end, *next;    end = &buffer.back() + 1;    begin = chunk = &buffer.front() + 8; @@ -126,7 +126,9 @@ void displayChunkNames(const std::vector<unsigned char>& buffer)      std::cout << lodepng_chunk_length(chunk) << ", "; -    chunk = lodepng_chunk_next_const(chunk); +    next = lodepng_chunk_next_const(chunk); +    if (next <= chunk) break; // integer overflow +    chunk = next;    }    std::cout << std::endl;  } @@ -212,7 +214,7 @@ void displayFilterTypes(const std::vector<unsigned char>& buffer)    }    //Read literal data from all IDAT chunks -  const unsigned char *chunk, *begin, *end; +  const unsigned char *chunk, *begin, *end, *next;    end = &buffer.back() + 1;    begin = chunk = &buffer.front() + 8; @@ -243,7 +245,9 @@ void displayFilterTypes(const std::vector<unsigned char>& buffer)        }      } -    chunk = lodepng_chunk_next_const(chunk); +    next = lodepng_chunk_next_const(chunk); +    if (next <= chunk) break; // integer overflow +    chunk = next;    }    //Decompress all IDAT data | 
