trinity-devel@lists.pearsoncomputing.net

Message: previous - next
Month: April 2012

Re: [trinity-devel] digikam - new jpegloader error prior to pngloader crash (related patch?)

From: "David C. Rankin" <drankinatty@...>
Date: Mon, 02 Apr 2012 19:26:57 -0500
On 04/02/2012 07:23 PM, David C. Rankin wrote:

>   I have also uncovered a digikam patch,
> http://bugsfiles.kde.org/attachment.cgi?id=56384 , that I don't think is a
> direct patch for this problem, but hopefully it will help a bit. The patch is
> labeled:
> 
> [Digikam-devel] [Bug 264181] New: png-1.5 compatibility fix
> http://mail.kde.org/pipermail/digikam-devel/2011-January/048984.html
> 
> This patchfile is:
> 
> $NetBSD: patch-aa,v 1.11 2011/01/20 23:37:36 wiz Exp $
> 
> Fix build with png-1.5.
> 
> --- libs/dimg/loaders/pngloader.cpp.orig	2010-11-22 17:47:36.000000000 +0000
> +++ libs/dimg/loaders/pngloader.cpp
> @@ -494,7 +494,8 @@ bool PNGLoader::load(const QString& file
> 
>      if (m_loadFlags & LoadICCData)
>      {
> -        png_charp   profile_name, profile_data=NULL;
> +        png_charp   profile_name;
> +        png_bytep   profile_data=NULL;
>          png_uint_32 profile_size;
>          int         compression_type;
> 
> @@ -730,7 +731,7 @@ bool PNGLoader::save(const QString& file
> 
>      if (!profile_rawdata.isEmpty())
>      {
> -        png_set_iCCP(png_ptr, info_ptr, (png_charp)("icc"),
> PNG_COMPRESSION_TYPE_BASE, profile_rawdata.data(), profile_rawdata.size());
> +        png_set_iCCP(png_ptr, info_ptr, (png_charp)("icc"),
> PNG_COMPRESSION_TYPE_BASE, (png_bytep)profile_rawdata.data(),
> profile_rawdata.size());
>      }
> 

There is a second patch that looks a bit more complete at:
http://bugsfiles.kde.org/attachment.cgi?id=56390


Index: libs/dimg/loaders/pngloader.cpp
===================================================================
--- libs/dimg/loaders/pngloader.cpp	(revision 1216766)
+++ libs/dimg/loaders/pngloader.cpp	(working copy)
@@ -73,6 +73,12 @@
 namespace Digikam
 {

+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 5
+typedef png_bytep iCCP_data;
+#else
+typedef png_charp iCCP_data;
+#endif
+
 PNGLoader::PNGLoader(DImg* image)
     : DImgLoader(image)
 {
@@ -574,7 +580,8 @@

     if (m_loadFlags & LoadICCData)
     {
-        png_charp   profile_name, profile_data=NULL;
+        png_charp   profile_name;
+        iCCP_data   profile_data=NULL;
         png_uint_32 profile_size;
         int         compression_type;

@@ -854,7 +861,7 @@

     if (!profile_rawdata.isEmpty())
     {
-        png_set_iCCP(png_ptr, info_ptr, (png_charp)("icc"),
PNG_COMPRESSION_TYPE_BASE, profile_rawdata.data(), profile_rawdata.size());
+        png_set_iCCP(png_ptr, info_ptr, (png_charp)("icc"),
PNG_COMPRESSION_TYPE_BASE, (iCCP_data)profile_rawdata.data(),
profile_rawdata.size());
     }

-- 
David C. Rankin, J.D.,P.E.