Hi,
I can understand to not using an special tool for debugging (valgrind).
Maybe Bounds-Checker, You use, does the same or is even better.
To isolate the problem I attach an small programm. Hope this makes visible
the behaviour under osX/win .
best regards
Kai-Uwe
Am 11.08.04, 10:49 +0200 schrieb Marti Maria:
>
> Hi,
>
> Ok, taken a look. Unfortunately, I am not able to spot where the overwrite is.
> I've checked against Windows Bounds-Checker. All ok. And in linux, there is no
> segmentation fault. Installing valgrid is not an option to me, since in the linux at
> work
> I have not required privileges to install it, and at home I am using cygwin, which is
> unsupported. I could try in the Mac, but I'm afraid this would finish in a true mess.
>
> The functions valgrid are reporting as buggy seems correct... may I abuse of your
> kindness and ask for a simple program that demonstrates the bug? I know this is a
> lot of work, but I'm completely lost without that.
>
> Which I have been trying is something like that:
>
> cmsHPROFILE h = cmsCreate_sRGBProfile()
> printf("%s", cmsTakeManufacturer(h));
>
> Is that correct?
>
> Thanks!
> Marti.
>
>
> ----- Original Message -----
> From: "Kai-Uwe Behrmann" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Cc: "Lcms Liste" <[EMAIL PROTECTED]>
> Sent: Tuesday, August 10, 2004 3:57 PM
> Subject: Re: [Lcms-user] incorrect memory access
>
>
> Hi Marti,
>
> sorry to come with the lcms-1.12 output. Unfortunedly the behaviour still
> remaines lcms-1.13 valgrind-2.1.0:
>
Mit freundlichen Gr��en
Kai-Uwe Behrmann
+ Bildprogrammierung / Panoramen
+ Farbmanagement
+ email: [EMAIL PROTECTED]
#include <lcms.h>
int
main (void) {
char* daten = NULL;
int size = 0;
cmsHPROFILE h = cmsCreate_sRGBProfile();
cmsHPROFILE l = cmsCreateLabProfile(NULL);
// Without _cmsSaveProfileToMem all runs fine
#define USE__cmsSaveProfileToMem
#ifdef USE__cmsSaveProfileToMem
_cmsSaveProfileToMem (h, NULL, &size);
daten = (char*) calloc (sizeof (char), size);
_cmsSaveProfileToMem (h, daten, &size);
#endif
/* The following shows the failed access in cmsReadICCText
==8994== Invalid read of size 1
==8994== at 0x40022225: memcpy (mac_replace_strmem.c:257)
==8994== by 0x402630FE: cmsReadICCText (cmsio1.c:1646)
==8994== by 0x40264359: cmsTakeProductInfo (cmsio1.c:2309)
==8994== by 0x804874C: main (in /tmp/RPMS/lcms/Test/text_Fehler/test)
==8994== Address 0x415F2952 is 2 bytes before a block of size 1276 alloc'd
==8994== at 0x4002ABF6: malloc (vg_replace_malloc.c:160)
==8994== by 0x40260FE2: ICCAllocStruct (cmsio1.c:432)
==8994== by 0x40261089: _cmsCreateProfilePlaceholder (cmsio1.c:455)
==8994== by 0x40275E3B: cmsCreateRGBProfile (cmsvirt.c:46) */
printf ("%s:%d %s() %s\n",__FILE__,__LINE__,__func__,
cmsTakeProductInfo(h));
cmsHPROFILE profile_array[2];
profile_array [0] = l;
profile_array [1] = h;
/* The following example shows the cmsReadICCMatrixRGB2XYZ thing
==8994== Use of uninitialised value of size 8
==8994== at 0x4026373D: cmsReadICCMatrixRGB2XYZ (cmsio1.c:1897)
==8994== by 0x4026E594: cmsBuildOutputMatrixShaper (cmsxform.c:539)
==8994== by 0x4026F35D: PickTransformRoutine (cmsxform.c:1068)
==8994== by 0x4026F68B: cmsCreateProofingTransform (cmsxform.c:1259)
==8994==
==8994== Use of uninitialised value of size 8
==8994== at 0x4026374A: cmsReadICCMatrixRGB2XYZ (cmsio1.c:1897)
==8994== by 0x4026E594: cmsBuildOutputMatrixShaper (cmsxform.c:539)
==8994== by 0x4026F35D: PickTransformRoutine (cmsxform.c:1068)
==8994== by 0x4026F68B: cmsCreateProofingTransform (cmsxform.c:1259)
==8994==
==8994== Use of uninitialised value of size 8
==8994== at 0x40263751: cmsReadICCMatrixRGB2XYZ (cmsio1.c:1897)
==8994== by 0x4026E594: cmsBuildOutputMatrixShaper (cmsxform.c:539)
==8994== by 0x4026F35D: PickTransformRoutine (cmsxform.c:1068)
==8994== by 0x4026F68B: cmsCreateProofingTransform (cmsxform.c:1259)
test.c:34 main() 1096747100 6876 1096761124
*/
cmsHTRANSFORM transform = cmsCreateMultiprofileTransform(profile_array,
2,
TYPE_Lab_16,
TYPE_RGB_8,
1,
0);
printf ("%s:%d %s() %d %d %d\n",__FILE__,__LINE__,__func__,
h, size, daten);
cmsCloseProfile (l);
cmsCloseProfile (h);
cmsDeleteTransform (transform);
#ifdef USE__cmsSaveProfileToMem
free (daten);
#endif
/*
==9007== 1560 bytes in 3 blocks are definitely lost in loss record 1 of 1
==9007== at 0x4002ABF6: malloc (vg_replace_malloc.c:160)
==9007== by 0x4025B7F9: cmsAllocGamma (cmsgamma.c:120)
==9007== by 0x4025F1A1: CreateLabPrelinearization (cmsgmt.c:955)
==9007== by 0x4025F467: _cmsComputePrelinearizationTablesFromXFORM (cmsgmt.c:991)
*/
return TRUE;
}