From: Kurt Zeilenga Date: Sun, 9 Aug 1998 03:40:29 +0000 (+0000) Subject: LDAPworldP22: problem with msgids greater than 32767 on 64bit architectures X-Git-Tag: LDAP_3_3+prerelease~27^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=271d678b0eabd7abf15da727685d820ffde56d0c;p=openldap LDAPworldP22: problem with msgids greater than 32767 on 64bit architectures --- diff --git a/libraries/liblber/decode.c b/libraries/liblber/decode.c index a722c9eb7a..368dedf4bb 100644 --- a/libraries/liblber/decode.c +++ b/libraries/liblber/decode.c @@ -155,6 +155,7 @@ ber_getnint( BerElement *ber, long *num, int len ) { int diff, sign, i; long netnum; + char *p; /* * The tag and length have already been stripped off. We should @@ -172,11 +173,12 @@ ber_getnint( BerElement *ber, long *num, int len ) if ( ber_read( ber, ((char *) &netnum) + diff, len ) != len ) return( -1 ); - /* sign extend if necessary */ - sign = ((0x80 << ((len - 1) * 8)) & netnum); - if ( sign && len < sizeof(long) ) { - for ( i = sizeof(long) - 1; i > len - 1; i-- ) { - netnum |= (0xffL << (i * 8)); + /* sign extend if necessary */ + p = (char *) &netnum; + sign = (0x80 & *(p+diff) ); + if ( sign && len < sizeof(long) ) { + for ( i = 0; i < diff; i++ ) { + *(p+i) = 0xff; } } *num = LBER_NTOHL( netnum );