[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#3614) Portability problems on Solaris10 amd64
The GPF seems indicative of a compiler fault. It is
certainly valid C to assign the return of a function
returning long to a variable declared as int. Or,
possibly, the compiler doesn't know that sysconf()
returns long (e.g., missing/incorrect headers).
However, that said, it does seem appropriate to
commit a change to protect against overflow.
Kurt
At 07:43 AM 3/30/2005, gkodinov@openlinksw.co.uk wrote:
>Full_Name: George Kodinov
>Version: openldap-stable-20050318
>OS: Solaris 10/AMD64
>URL: ftp://ftp.openldap.org/incoming/
>Submission from: (NULL) (213.91.243.4)
>
>
>ldap_bind_s fails with a GPF if the library is compiled in the Solaris 10 64 bit
>mode (using the Sun Studio 10 and the '-xtarget=opteron -xarch=amd64').
>
>This is caused by the fact that the sysconf () (3C) API is defined as
>long sysconf(int name),
>
>but it's return value : long (8 bytes on this platform) is assigned to an int (4
>bytes on this platform).
>
>Here's a small diff to fix that :
>--- openldap-2.2.24/libraries/libldap/os-ip.c 2005-01-31 17:53:39.000000000
>+0200
>+++ openldap-2.2.24.my/libraries/libldap/os-ip.c 2005-03-30
>18:34:59.000000000 +0300
>@@ -712,7 +712,7 @@
> void
> ldap_int_ip_init( void )
> {
>- int tblsize;
>+ long tblsize;
> #if defined( HAVE_SYSCONF )
> tblsize = sysconf( _SC_OPEN_MAX );
> #elif defined( HAVE_GETDTABLESIZE )
>@@ -725,6 +725,8 @@
> if( tblsize > FD_SETSIZE )
> tblsize = FD_SETSIZE;
> #endif /* FD_SETSIZE*/
>+ if ( tblsize > INT_MAX)
>+ tblsize = INT_MAX;
> ldap_int_tblsize = tblsize;
> }