[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#5436) htons() expects an unsigned short

On Tue, 18 Mar 2008, Hallvard B Furuseth wrote:

> Thanks.  Fixed os-ip.c in CVS HEAD (but see below).
> rein@basefarm.no writes:
>> libraries/libldap/os-ip.c casts the argument to htons() to a short, it
>> should be an explicit unsigned short.  This causes the use of high
>> port numbers to fail on systems where shorts are signed by default.
> short is signed by definition.

More the good reason why it should be cast to an unsigned then, as that is
what htons() expects.

> Do you have a test case?  As far as I can tell it broke if the caller
> had the same error: storing a port number in a short, and passing that
> short to ldap_init() & co.  And it broke on systems with 16-bit int, if
> there are such system around where OpenLDAP compiles in the first place.
> If we care about systems with 16-bit int, the proper fix is to also make
> LDAPURLDesc.lud_port and various 'port' function parameters unsigned.  I
> have no idea if there is such a system which can even compile OpenLDAP
> though.

No, I don't have a test case.  This is a fairly insignificant bugfix I
commited to our copy of the source six years ago and has never gotten
around to report back (sorry for that).

The exact details I'm afraid I have forgotten a long time ago, and I
generally find that figuring too much about the gory storage details of
signed vs. unsigned, and big/little-endianness only gives me a slight
headache ;-) But it definitely wasn't any 16-bit systems, and I can't
see any reason why anyone should worry about those anymore.. It was most
likely on a 64bit sparc system using sun's compiler, but it might have
been linux/gcc on a 32bit i686 for all I remember now.