Skip to content

Instantly share code, notes, and snippets.

@joenoon
Created June 8, 2013 02:35
Show Gist options
  • Save joenoon/5733730 to your computer and use it in GitHub Desktop.
Save joenoon/5733730 to your computer and use it in GitHub Desktop.
Original http://pkgs.fedoraproject.org/cgit/htmldoc.git/plain/htmldoc-1.8.27-libpng15.patch?h=f18
From upstream 1.8 branch svn r1668
The previous libpng-1.5 conversion patch here caused corrupt PNG output
on 64 bit. e.g. http://answerpot.com/showthread.php?3662601-PNG+Rendering+Problems
The upstream version (below) works well.
Index: htmldoc/image.cxx
===================================================================
--- htmldoc/image.cxx.orig
+++ htmldoc/image.cxx
@@ -3,23 +3,11 @@
*
* Image handling routines for HTMLDOC, a HTML document processing program.
*
- * Copyright 1997-2005 by Easy Software Products.
+ * Copyright 2011 by Michael R Sweet.
+ * Copyright 1997-2010 by Easy Software Products. All rights reserved.
*
- * These coded instructions, statements, and computer programs are the
- * property of Easy Software Products and are protected by Federal
- * copyright law. Distribution and use rights are outlined in the file
- * "COPYING.txt" which should have been included with this file. If this
- * file is missing or damaged please contact Easy Software Products
- * at:
- *
- * Attn: ESP Licensing Information
- * Easy Software Products
- * 44141 Airport View Drive, Suite 204
- * Hollywood, Maryland 20636-3142 USA
- *
- * Voice: (301) 373-9600
- * EMail: info@easysw.com
- * WWW: http://www.easysw.com
+ * This program is free software. Distribution and use rights are outlined in
+ * the file "COPYING.txt".
*
* Contents:
*
@@ -1499,7 +1487,7 @@ image_load_png(image_t *img, /* I - Imag
rows = NULL;
- if (setjmp(pp->jmpbuf))
+ if (setjmp(png_jmpbuf(pp)))
{
progress_error(HD_ERROR_BAD_FORMAT, "PNG file contains errors!");
@@ -1526,7 +1514,7 @@ image_load_png(image_t *img, /* I - Imag
png_read_info(pp, info);
- if (info->color_type & PNG_COLOR_MASK_PALETTE)
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_PALETTE)
{
png_set_expand(pp);
@@ -1535,15 +1523,15 @@ image_load_png(image_t *img, /* I - Imag
if (Encryption)
img->use ++;
}
- else if (info->bit_depth < 8)
+ else if (png_get_bit_depth(pp, info) < 8)
{
png_set_packing(pp);
png_set_expand(pp);
}
- else if (info->bit_depth == 16)
+ else if (png_get_bit_depth(pp, info) == 16)
png_set_strip_16(pp);
- if (info->color_type & PNG_COLOR_MASK_COLOR)
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_COLOR)
{
depth = 3;
img->depth = gray ? 1 : 3;
@@ -1554,10 +1542,10 @@ image_load_png(image_t *img, /* I - Imag
img->depth = 1;
}
- img->width = info->width;
- img->height = info->height;
+ img->width = png_get_image_width(pp, info);
+ img->height = png_get_image_height(pp, info);
- if ((info->color_type & PNG_COLOR_MASK_ALPHA) || info->num_trans)
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_ALPHA)
{
if ((PSLevel == 0 && PDFVersion >= 14) || PSLevel == 3)
image_need_mask(img, 8);
@@ -1571,14 +1559,14 @@ image_load_png(image_t *img, /* I - Imag
#ifdef DEBUG
printf("color_type=0x%04x, depth=%d, img->width=%d, img->height=%d, img->depth=%d\n",
- info->color_type, depth, img->width, img->height, img->depth);
- if (info->color_type & PNG_COLOR_MASK_COLOR)
+ png_get_color_type(pp, info), depth, img->width, img->height, img->depth);
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_COLOR)
puts(" COLOR");
else
puts(" GRAYSCALE");
- if ((info->color_type & PNG_COLOR_MASK_ALPHA) || info->num_trans)
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_ALPHA)
puts(" ALPHA");
- if (info->color_type & PNG_COLOR_MASK_PALETTE)
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_PALETTE)
puts(" PALETTE");
#endif // DEBUG
@@ -1594,9 +1582,9 @@ image_load_png(image_t *img, /* I - Imag
* Allocate pointers...
*/
- rows = (png_bytep *)calloc(info->height, sizeof(png_bytep));
+ rows = (png_bytep *)calloc(png_get_image_height(pp, info), sizeof(png_bytep));
- for (i = 0; i < (int)info->height; i ++)
+ for (i = 0; i < (int)png_get_image_height(pp, info); i ++)
rows[i] = img->pixels + i * img->width * depth;
/*
@@ -1610,7 +1598,7 @@ image_load_png(image_t *img, /* I - Imag
* Generate the alpha mask as necessary...
*/
- if ((info->color_type & PNG_COLOR_MASK_ALPHA) || info->num_trans)
+ if (png_get_color_type(pp, info) & PNG_COLOR_MASK_ALPHA)
{
#ifdef DEBUG
for (inptr = img->pixels, i = 0; i < img->height; i ++)
@@ -1639,7 +1627,7 @@ image_load_png(image_t *img, /* I - Imag
* Reformat the data as necessary for the reader...
*/
- if (gray && info->color_type & PNG_COLOR_MASK_COLOR)
+ if (gray && png_get_color_type(pp, info) & PNG_COLOR_MASK_COLOR)
{
/*
* Greyscale output needed...
@@ -1720,7 +1708,7 @@ image_need_mask(image_t *img, /* I - Ima
{
// Alpha mask
img->maskwidth = (img->width * scaling + 7) / 8;
- size = img->maskwidth * img->height * scaling;
+ size = img->maskwidth * img->height * scaling + 1;
}
img->mask = (uchar *)calloc(size, 1);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment