This is the mail archive of the
cygwin-apps
mailing list for the Cygwin project.
Re: [64bit] openldap compilation doesn't produce shared libraries
- From: "Yaakov (Cygwin/X)" <yselkowitz at users dot sourceforge dot net>
- To: cygwin-apps at cygwin dot com
- Date: Wed, 12 Jun 2013 20:52:44 -0500
- Subject: Re: [64bit] openldap compilation doesn't produce shared libraries
- References: <87sj13i801 dot fsf at oracle dot com> <51A8D6C0 dot 3060507 at users dot sourceforge dot net> <51B1945E dot 6060002 at users dot sourceforge dot net> <87obbil3hb dot fsf at VZELL-LAP dot de dot oracle dot com> <87wqq2cotj dot fsf at oracle dot com> <20130610095305 dot GA32691 at calimero dot vinschen dot de> <87bo7ekuaz dot fsf at VZELL-LAP dot de dot oracle dot com>
On 2013-06-10 07:46, Dr. Volker Zell wrote:
I think the stack trace translates to the following:
Stack trace:
Frame Function Args
ber_get_stringbvl
/usr/src/debug/openldap-2.4.35-1/libraries/liblber/decode.c:414
ber_scanf
/usr/src/debug/openldap-2.4.35-1/libraries/liblber/decode.c:790
ldap_get_attribute_ber
/usr/src/debug/openldap-2.4.35-1/libraries/libldap/getattr.c:132
print_entry
/usr/src/debug/openldap-2.4.35-1/clients/tools/ldapsearch.c:1634
main
/usr/src/debug/openldap-2.4.35-1/clients/tools/ldapsearch.c:1222
The offending code line
case BvOff:
res.bo = (char *) b->result + b->off;
((struct berval *) (res.bo + tot_size))->bv_val = NULL; <- line 414
tot_size = 0;
break;
That is where it is crashing, but after some debugging, AFAICS the real
culprit is the call to ber_scanf() in ldap_get_attribute_ber().
Presumably because this is a varargs function, the compiler wasn't able
to handle the necessary type promotion automatically (ber_len_t is an
unsigned long); so b->off was showing here as 0x600000000, taking line
414 off to la-la land. Patch attached and pushed to Ports git.
Yaakov
--- origsrc/openldap-2.4.35/libraries/libldap/getattr.c 2013-03-28 10:41:51.000000000 -0500
+++ src/openldap-2.4.35/libraries/libldap/getattr.c 2013-06-12 19:07:31.378388100 -0500
@@ -147,7 +147,7 @@ ldap_get_attribute_ber( LDAP *ld, LDAPMe
/* skip sequence, snarf attribute type */
tag = ber_scanf( ber, vals ? "{mM}" : "{mx}", attr, vals,
- &siz, 0 );
+ &siz, (ber_len_t) 0 );
if( tag == LBER_ERROR ) {
rc = ld->ld_errno = LDAP_DECODING_ERROR;
}