]> git.sur5r.net Git - openldap/commitdiff
Fix integer overflow in slap_loglevel_get() - ITS#5035.
authorHallvard Furuseth <hallvard@openldap.org>
Sun, 1 Jul 2007 13:39:24 +0000 (13:39 +0000)
committerHallvard Furuseth <hallvard@openldap.org>
Sun, 1 Jul 2007 13:39:24 +0000 (13:39 +0000)
servers/slapd/bconfig.c

index 4afb80426d6519cc66732a934b883b0e1ba856ae..d7b94cef5d089172cc560b9b6a136c01fbd04b84 100644 (file)
@@ -2445,7 +2445,7 @@ int
 slap_loglevel_get( struct berval *s, int *l )
 {
        int             rc;
-       unsigned long   i;
+       unsigned        i;
        slap_mask_t     m;
 
        if ( loglevel_ops == NULL ) {
@@ -2456,19 +2456,17 @@ slap_loglevel_get( struct berval *s, int *l )
                m |= loglevel_ops[ i ].mask;
        }
 
-       m = ~m;
-
-       for ( i = 1; i <= ( 1 << ( sizeof( int ) * 8 - 1 ) ) && !( m & i ); i <<= 1 )
+       for ( i = 1; m & i; i <<= 1 )
                ;
 
-       if ( !( m & i ) ) {
+       if ( i == 0 ) {
                return -1;
        }
 
        rc = slap_verbmasks_append( &loglevel_ops, i, s, loglevel_ignore );
 
        if ( rc != 0 ) {
-               Debug( LDAP_DEBUG_ANY, "slap_loglevel_get(%lu, \"%s\") failed\n",
+               Debug( LDAP_DEBUG_ANY, "slap_loglevel_get(%u, \"%s\") failed\n",
                        i, s->bv_val, 0 );
 
        } else {