[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: core dumped on create new entries with UTF/base64 dn (ITS#2632)
>The back trace you provided shows a trashed stack but no
>indication of how that occurred. You'll likely will need
>to walk through the code in a debugger to determine how
>that occurred.
i386 and sparc64 has different size of type long:
i386 has sizeof(long) = 4
sparc64 has sizeof(long) = 8
Many data types, (for example libraries/liblunicode/ucdata/ucdata.c) defined
as unsigned long:
static unsigned long *_ucdcmp_nodes;
and used as unsigned int:
#define endian_long(cc) ((((cc) & 0xff) << 24)|((((cc) >> 8) & 0xff) <<
16)|\
((((cc) >> 16) & 0xff) << 8)|((cc) >> 24))
_ucdcmp_nodes[i] = endian_long(_ucdcmp_nodes[i]);
or
typedef struct {
ac_uint2 bom;
ac_uint2 cnt;
union {
ac_uint4 bytes;
ac_uint2 len[2];
} size;
} _ucheader_t;
_ucheader_t hdr;
hdr.size.bytes = endian_long(hdr.size.bytes);
_ucdcmp_nodes = (unsigned long *) malloc(hdr.size.bytes);
why you do not use ac_uint4 instead of unsigned long?
---
/var/tmp/mnt/devel/ncvs/ports/mts/openldap21/work/openldap-2.1.22/libraries/
liblunicode/ucdata/ucdata.c Sun Feb 9 02:50:39 2003
+++ ucdata.c Tue Jul 8 09:24:40 2003
@@ -110,7 +110,7 @@
static unsigned long _ucprop_size;
static unsigned short *_ucprop_offsets;
-static unsigned long *_ucprop_ranges;
+static ac_uint4 *_ucprop_ranges;
/*
* Return -1 on error, 0 if okay
@@ -171,7 +171,7 @@
if ((size = ((hdr.cnt + 1) * sizeof(unsigned short))) & 3)
size += 4 - (size & 3);
size >>= 1;
- _ucprop_ranges = (unsigned long *) (_ucprop_offsets + size);
+ _ucprop_ranges = (ac_uint4 *) (_ucprop_offsets + size);
/*
* Load the offset array.
@@ -191,7 +191,7 @@
* Load the ranges. The number of elements is in the last array
position
* of the offsets.
*/
- fread((char *) _ucprop_ranges, sizeof(unsigned long),
+ fread((char *) _ucprop_ranges, sizeof(ac_uint4),
_ucprop_offsets[_ucprop_size], in);
fclose(in);
@@ -291,7 +291,7 @@
static unsigned long _uccase_size;
static unsigned short _uccase_len[2];
-static unsigned long *_uccase_map;
+static ac_uint4 *_uccase_map;
/*
* Return -1 on error, 0 if okay
@@ -336,13 +336,13 @@
_uccase_len[0] = hdr.size.len[0] * 3;
_uccase_len[1] = hdr.size.len[1] * 3;
- _uccase_map = (unsigned long *)
- malloc(_uccase_size * sizeof(unsigned long));
+ _uccase_map = (ac_uint4 *)
+ malloc(_uccase_size * sizeof(ac_uint4));
/*
* Load the case mapping table.
*/
- fread((char *) _uccase_map, sizeof(unsigned long), _uccase_size, in);
+ fread((char *) _uccase_map, sizeof(ac_uint4), _uccase_size, in);
/*
* Do an endian swap if necessary.
@@ -482,7 +482,7 @@
**************************************************************************/
static unsigned long _uccomp_size;
-static unsigned long *_uccomp_data;
+static ac_uint4 *_uccomp_data;
/*
* Return -1 on error, 0 if okay
@@ -519,13 +519,13 @@
}
_uccomp_size = hdr.cnt;
- _uccomp_data = (unsigned long *) malloc(hdr.size.bytes);
+ _uccomp_data = (ac_uint4 *) malloc(hdr.size.bytes);
/*
* Read the composition data in.
*/
- size = hdr.size.bytes / sizeof(unsigned long);
- fread((char *) _uccomp_data, sizeof(unsigned long), size, in);
+ size = hdr.size.bytes / sizeof(ac_uint4);
+ fread((char *) _uccomp_data, sizeof(ac_uint4), size, in);
/*
* Do an endian swap if necessary.
@@ -672,12 +672,12 @@
**************************************************************************/
static unsigned long _ucdcmp_size;
-static unsigned long *_ucdcmp_nodes;
-static unsigned long *_ucdcmp_decomp;
+static ac_uint4 *_ucdcmp_nodes;
+static ac_uint4 *_ucdcmp_decomp;
static unsigned long _uckdcmp_size;
-static unsigned long *_uckdcmp_nodes;
-static unsigned long *_uckdcmp_decomp;
+static ac_uint4 *_uckdcmp_nodes;
+static ac_uint4 *_uckdcmp_decomp;
/*
* Return -1 on error, 0 if okay
@@ -714,14 +714,14 @@
}
_ucdcmp_size = hdr.cnt << 1;
- _ucdcmp_nodes = (unsigned long *) malloc(hdr.size.bytes);
+ _ucdcmp_nodes = (ac_uint4 *) malloc(hdr.size.bytes);
_ucdcmp_decomp = _ucdcmp_nodes + (_ucdcmp_size + 1);
/*
* Read the decomposition data in.
*/
- size = hdr.size.bytes / sizeof(unsigned long);
- fread((char *) _ucdcmp_nodes, sizeof(unsigned long), size, in);
+ size = hdr.size.bytes / sizeof(ac_uint4);
+ fread((char *) _ucdcmp_nodes, sizeof(ac_uint4), size, in);
/*
* Do an endian swap if necessary.
@@ -769,14 +769,14 @@
}
_uckdcmp_size = hdr.cnt << 1;
- _uckdcmp_nodes = (unsigned long *) malloc(hdr.size.bytes);
+ _uckdcmp_nodes = (ac_uint4 *) malloc(hdr.size.bytes);
_uckdcmp_decomp = _uckdcmp_nodes + (_uckdcmp_size + 1);
/*
* Read the decomposition data in.
*/
- size = hdr.size.bytes / sizeof(unsigned long);
- fread((char *) _uckdcmp_nodes, sizeof(unsigned long), size, in);
+ size = hdr.size.bytes / sizeof(ac_uint4);
+ fread((char *) _uckdcmp_nodes, sizeof(ac_uint4), size, in);
/*
* Do an endian swap if necessary.
@@ -987,7 +987,7 @@
**************************************************************************/
static unsigned long _uccmcl_size;
-static unsigned long *_uccmcl_nodes;
+static ac_uint4 *_uccmcl_nodes;
/*
* Return -1 on error, 0 if okay
@@ -1024,12 +1024,12 @@
}
_uccmcl_size = hdr.cnt * 3;
- _uccmcl_nodes = (unsigned long *) malloc(hdr.size.bytes);
+ _uccmcl_nodes = (ac_uint4 *) malloc(hdr.size.bytes);
/*
* Read the combining classes in.
*/
- fread((char *) _uccmcl_nodes, sizeof(unsigned long), _uccmcl_size, in);
+ fread((char *) _uccmcl_nodes, sizeof(ac_uint4), _uccmcl_size, in);
/*
* Do an endian swap if necessary.
@@ -1079,7 +1079,7 @@
*
**************************************************************************/
-static unsigned long *_ucnum_nodes;
+static ac_uint4 *_ucnum_nodes;
static unsigned long _ucnum_size;
static short *_ucnum_vals;
@@ -1137,7 +1137,7 @@
* Determine the number of values that have to be adjusted.
*/
size = (hdr.size.bytes -
- (_ucnum_size * (sizeof(unsigned long) << 1))) /
+ (_ucnum_size * (sizeof(ac_uint4) << 1))) /
sizeof(short);
for (i = 0; i < size; i++)
Thanks!