| Index: third_party/libpng/pngwutil.c
 | 
| diff --git a/third_party/libpng/pngwutil.c b/third_party/libpng/pngwutil.c
 | 
| index c75f53eb7de8d83ed78aa96752e327b851f20e50..bc6c98669c5a0b31edf1f4a61559ba948477926b 100644
 | 
| --- a/third_party/libpng/pngwutil.c
 | 
| +++ b/third_party/libpng/pngwutil.c
 | 
| @@ -1,8 +1,8 @@
 | 
|  
 | 
|  /* pngwutil.c - utilities to write a PNG file
 | 
|   *
 | 
| - * Last changed in libpng 1.2.43 [February 25, 2010]
 | 
| - * Copyright (c) 1998-2010 Glenn Randers-Pehrson
 | 
| + * Last changed in libpng 1.2.54 [November 12, 2015]
 | 
| + * Copyright (c) 1998-2015 Glenn Randers-Pehrson
 | 
|   * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
 | 
|   * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
 | 
|   *
 | 
| @@ -254,7 +254,7 @@ png_text_compress(png_structp png_ptr,
 | 
|                 old_ptr = comp->output_ptr;
 | 
|                 comp->output_ptr = (png_charpp)png_malloc(png_ptr,
 | 
|                    (png_uint_32)
 | 
| -                  (comp->max_output_ptr * png_sizeof(png_charpp)));
 | 
| +                  (comp->max_output_ptr * png_sizeof(png_charp)));
 | 
|                 png_memcpy(comp->output_ptr, old_ptr, old_max
 | 
|                    * png_sizeof(png_charp));
 | 
|                 png_free(png_ptr, old_ptr);
 | 
| @@ -575,17 +575,20 @@ png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal)
 | 
|  #ifdef PNG_USE_LOCAL_ARRAYS
 | 
|     PNG_PLTE;
 | 
|  #endif
 | 
| -   png_uint_32 i;
 | 
| +   png_uint_32 max_palette_length, i;
 | 
|     png_colorp pal_ptr;
 | 
|     png_byte buf[3];
 | 
|  
 | 
|     png_debug(1, "in png_write_PLTE");
 | 
|  
 | 
| +   max_palette_length = (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
 | 
| +      (1 << png_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
 | 
| +
 | 
|     if ((
 | 
|  #ifdef PNG_MNG_FEATURES_SUPPORTED
 | 
|          !(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) &&
 | 
|  #endif
 | 
| -        num_pal == 0) || num_pal > 256)
 | 
| +       num_pal == 0) || num_pal > max_palette_length)
 | 
|     {
 | 
|       if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
 | 
|       {
 | 
| @@ -1759,6 +1762,7 @@ void /* PRIVATE */
 | 
|  png_write_start_row(png_structp png_ptr)
 | 
|  {
 | 
|  #ifdef PNG_WRITE_INTERLACING_SUPPORTED
 | 
| +#ifndef PNG_USE_GLOBAL_ARRAYS
 | 
|     /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
 | 
|  
 | 
|     /* Start of interlace block */
 | 
| @@ -1773,6 +1777,7 @@ png_write_start_row(png_structp png_ptr)
 | 
|     /* Offset to next interlace block in the y direction */
 | 
|     int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
 | 
|  #endif
 | 
| +#endif
 | 
|  
 | 
|     png_size_t buf_size;
 | 
|  
 | 
| @@ -1857,6 +1862,7 @@ void /* PRIVATE */
 | 
|  png_write_finish_row(png_structp png_ptr)
 | 
|  {
 | 
|  #ifdef PNG_WRITE_INTERLACING_SUPPORTED
 | 
| +#ifndef PNG_USE_GLOBAL_ARRAYS
 | 
|     /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
 | 
|  
 | 
|     /* Start of interlace block */
 | 
| @@ -1871,6 +1877,7 @@ png_write_finish_row(png_structp png_ptr)
 | 
|     /* Offset to next interlace block in the y direction */
 | 
|     int png_pass_yinc[7] = {8, 8, 8, 4, 4, 2, 2};
 | 
|  #endif
 | 
| +#endif
 | 
|  
 | 
|     int ret;
 | 
|  
 | 
| @@ -1976,11 +1983,13 @@ png_do_write_interlace(png_row_infop row_info, png_bytep row, int pass)
 | 
|  {
 | 
|     /* Arrays to facilitate easy interlacing - use pass (0 - 6) as index */
 | 
|  
 | 
| +#ifndef PNG_USE_GLOBAL_ARRAYS
 | 
|     /* Start of interlace block */
 | 
|     int png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
 | 
|  
 | 
|     /* Offset to next interlace block */
 | 
|     int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
 | 
| +#endif
 | 
|  
 | 
|     png_debug(1, "in png_do_write_interlace");
 | 
|  
 | 
| @@ -2150,20 +2159,9 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|     png_uint_32 mins, bpp;
 | 
|     png_byte filter_to_do = png_ptr->do_filter;
 | 
|     png_uint_32 row_bytes = row_info->rowbytes;
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -   int num_p_filters = (int)png_ptr->num_prev_filters;
 | 
| -#endif 
 | 
|  
 | 
|     png_debug(1, "in png_write_find_filter");
 | 
|  
 | 
| -#ifndef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -  if (png_ptr->row_number == 0 && filter_to_do == PNG_ALL_FILTERS)
 | 
| -  {
 | 
| -      /* These will never be selected so we need not test them. */
 | 
| -      filter_to_do &= ~(PNG_FILTER_UP | PNG_FILTER_PAETH);
 | 
| -  }
 | 
| -#endif 
 | 
| -
 | 
|     /* Find out how many bytes offset each pixel is */
 | 
|     bpp = (row_info->pixel_depth + 7) >> 3;
 | 
|  
 | 
| @@ -2213,41 +2211,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|           sum += (v < 128) ? v : 256 - v;
 | 
|        }
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         png_uint_32 sumhi, sumlo;
 | 
| -         int j;
 | 
| -         sumlo = sum & PNG_LOMASK;
 | 
| -         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK; /* Gives us some footroom */
 | 
| -
 | 
| -         /* Reduce the sum if we match any of the previous rows */
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
 | 
| -            {
 | 
| -               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         /* Factor in the cost of this filter (this is here for completeness,
 | 
| -          * but it makes no sense to have a "cost" for the NONE filter, as
 | 
| -          * it has the minimum possible computational cost - none).
 | 
| -          */
 | 
| -         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_NONE]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (sumhi > PNG_HIMASK)
 | 
| -            sum = PNG_MAXSUM;
 | 
| -         else
 | 
| -            sum = (sumhi << PNG_HISHIFT) + sumlo;
 | 
| -      }
 | 
| -#endif
 | 
|        mins = sum;
 | 
|     }
 | 
|  
 | 
| @@ -2277,41 +2240,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|        png_uint_32 i;
 | 
|        int v;
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      /* We temporarily increase the "minimum sum" by the factor we
 | 
| -       * would reduce the sum of this filter, so that we can do the
 | 
| -       * early exit comparison without scaling the sum each time.
 | 
| -       */
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 lmhi, lmlo;
 | 
| -         lmlo = lmins & PNG_LOMASK;
 | 
| -         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
 | 
| -            {
 | 
| -               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (lmhi > PNG_HIMASK)
 | 
| -            lmins = PNG_MAXSUM;
 | 
| -         else
 | 
| -            lmins = (lmhi << PNG_HISHIFT) + lmlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        for (i = 0, rp = row_buf + 1, dp = png_ptr->sub_row + 1; i < bpp;
 | 
|             i++, rp++, dp++)
 | 
|        {
 | 
| @@ -2330,37 +2258,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|              break;
 | 
|        }
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 sumhi, sumlo;
 | 
| -         sumlo = sum & PNG_LOMASK;
 | 
| -         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_SUB)
 | 
| -            {
 | 
| -               sumlo = (sumlo * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               sumhi = (sumhi * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         sumlo = (sumlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         sumhi = (sumhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_SUB]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (sumhi > PNG_HIMASK)
 | 
| -            sum = PNG_MAXSUM;
 | 
| -         else
 | 
| -            sum = (sumhi << PNG_HISHIFT) + sumlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        if (sum < mins)
 | 
|        {
 | 
|           mins = sum;
 | 
| @@ -2390,38 +2287,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|        png_uint_32 i;
 | 
|        int v;
 | 
|  
 | 
| -
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 lmhi, lmlo;
 | 
| -         lmlo = lmins & PNG_LOMASK;
 | 
| -         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
 | 
| -            {
 | 
| -               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_UP]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (lmhi > PNG_HIMASK)
 | 
| -            lmins = PNG_MAXSUM;
 | 
| -         else
 | 
| -            lmins = (lmhi << PNG_HISHIFT) + lmlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        for (i = 0, rp = row_buf + 1, dp = png_ptr->up_row + 1,
 | 
|             pp = prev_row + 1; i < row_bytes; i++)
 | 
|        {
 | 
| @@ -2433,37 +2298,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|              break;
 | 
|        }
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 sumhi, sumlo;
 | 
| -         sumlo = sum & PNG_LOMASK;
 | 
| -         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_UP)
 | 
| -            {
 | 
| -               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_UP]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (sumhi > PNG_HIMASK)
 | 
| -            sum = PNG_MAXSUM;
 | 
| -         else
 | 
| -            sum = (sumhi << PNG_HISHIFT) + sumlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        if (sum < mins)
 | 
|        {
 | 
|           mins = sum;
 | 
| @@ -2496,37 +2330,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|        png_uint_32 i;
 | 
|        int v;
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 lmhi, lmlo;
 | 
| -         lmlo = lmins & PNG_LOMASK;
 | 
| -         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_AVG)
 | 
| -            {
 | 
| -               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_AVG]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (lmhi > PNG_HIMASK)
 | 
| -            lmins = PNG_MAXSUM;
 | 
| -         else
 | 
| -            lmins = (lmhi << PNG_HISHIFT) + lmlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        for (i = 0, rp = row_buf + 1, dp = png_ptr->avg_row + 1,
 | 
|             pp = prev_row + 1; i < bpp; i++)
 | 
|        {
 | 
| @@ -2545,37 +2348,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|              break;
 | 
|        }
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 sumhi, sumlo;
 | 
| -         sumlo = sum & PNG_LOMASK;
 | 
| -         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_NONE)
 | 
| -            {
 | 
| -               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_AVG]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (sumhi > PNG_HIMASK)
 | 
| -            sum = PNG_MAXSUM;
 | 
| -         else
 | 
| -            sum = (sumhi << PNG_HISHIFT) + sumlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        if (sum < mins)
 | 
|        {
 | 
|           mins = sum;
 | 
| @@ -2629,37 +2401,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|        png_uint_32 i;
 | 
|        int v;
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 lmhi, lmlo;
 | 
| -         lmlo = lmins & PNG_LOMASK;
 | 
| -         lmhi = (lmins >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
 | 
| -            {
 | 
| -               lmlo = (lmlo * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               lmhi = (lmhi * png_ptr->inv_filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         lmlo = (lmlo * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         lmhi = (lmhi * png_ptr->inv_filter_costs[PNG_FILTER_VALUE_PAETH]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (lmhi > PNG_HIMASK)
 | 
| -            lmins = PNG_MAXSUM;
 | 
| -         else
 | 
| -            lmins = (lmhi << PNG_HISHIFT) + lmlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        for (i = 0, rp = row_buf + 1, dp = png_ptr->paeth_row + 1,
 | 
|             pp = prev_row + 1; i < bpp; i++)
 | 
|        {
 | 
| @@ -2710,37 +2451,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|              break;
 | 
|        }
 | 
|  
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -      if (png_ptr->heuristic_method == PNG_FILTER_HEURISTIC_WEIGHTED)
 | 
| -      {
 | 
| -         int j;
 | 
| -         png_uint_32 sumhi, sumlo;
 | 
| -         sumlo = sum & PNG_LOMASK;
 | 
| -         sumhi = (sum >> PNG_HISHIFT) & PNG_HIMASK;
 | 
| -
 | 
| -         for (j = 0; j < num_p_filters; j++)
 | 
| -         {
 | 
| -            if (png_ptr->prev_filters[j] == PNG_FILTER_VALUE_PAETH)
 | 
| -            {
 | 
| -               sumlo = (sumlo * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -               sumhi = (sumhi * png_ptr->filter_weights[j]) >>
 | 
| -                  PNG_WEIGHT_SHIFT;
 | 
| -            }
 | 
| -         }
 | 
| -
 | 
| -         sumlo = (sumlo * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -         sumhi = (sumhi * png_ptr->filter_costs[PNG_FILTER_VALUE_PAETH]) >>
 | 
| -            PNG_COST_SHIFT;
 | 
| -
 | 
| -         if (sumhi > PNG_HIMASK)
 | 
| -            sum = PNG_MAXSUM;
 | 
| -         else
 | 
| -            sum = (sumhi << PNG_HISHIFT) + sumlo;
 | 
| -      }
 | 
| -#endif
 | 
| -
 | 
|        if (sum < mins)
 | 
|        {
 | 
|           best_row = png_ptr->paeth_row;
 | 
| @@ -2750,21 +2460,6 @@ png_write_find_filter(png_structp png_ptr, png_row_infop row_info)
 | 
|     /* Do the actual writing of the filtered row data from the chosen filter. */
 | 
|  
 | 
|     png_write_filtered_row(png_ptr, best_row);
 | 
| -
 | 
| -#ifdef PNG_WRITE_FILTER_SUPPORTED
 | 
| -#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 | 
| -   /* Save the type of filter we picked this time for future calculations */
 | 
| -   if (png_ptr->num_prev_filters > 0)
 | 
| -   {
 | 
| -      int j;
 | 
| -      for (j = 1; j < num_p_filters; j++)
 | 
| -      {
 | 
| -         png_ptr->prev_filters[j] = png_ptr->prev_filters[j - 1];
 | 
| -      }
 | 
| -      png_ptr->prev_filters[j] = best_row[0];
 | 
| -   }
 | 
| -#endif
 | 
| -#endif /* PNG_WRITE_FILTER_SUPPORTED */
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |