diff --git a/libraries/libldap/search.c b/libraries/libldap/search.c index d92a8bcd1a..b3a8ddb10e 100644 --- a/libraries/libldap/search.c +++ b/libraries/libldap/search.c @@ -301,27 +301,25 @@ ldap_build_search_req( #ifdef LDAP_DEBUG if ( ldap_debug & LDAP_DEBUG_ARGS ) { - char buf[ BUFSIZ ] = { ' ', '*', '\0' }; + char buf[ BUFSIZ ], *ptr = " *"; if ( attrs != NULL ) { - char *ptr; - int i; + int i, len, rest = sizeof( buf ); - for ( ptr = buf, i = 0; - attrs[ i ] != NULL && ptr < &buf[ sizeof( buf ) ]; - i++ ) - { - ptr += snprintf( ptr, sizeof( buf ) - ( ptr - buf ), - " %s", attrs[ i ] ); + for ( i = 0; attrs[ i ] != NULL && rest > 0; i++ ) { + ptr = &buf[ sizeof( buf ) - rest ]; + len = snprintf( ptr, rest, " %s", attrs[ i ] ); + rest -= (len >= 0 ? len : (int) sizeof( buf )); } - if ( ptr >= &buf[ sizeof( buf ) ] ) { + if ( rest <= 0 ) { AC_MEMCPY( &buf[ sizeof( buf ) - STRLENOF( "...(truncated)" ) - 1 ], "...(truncated)", STRLENOF( "...(truncated)" ) + 1 ); } + ptr = buf; } - Debug( LDAP_DEBUG_ARGS, "ldap_build_search_req ATTRS:%s\n", buf, 0, 0 ); + Debug( LDAP_DEBUG_ARGS, "ldap_build_search_req ATTRS:%s\n", ptr, 0,0 ); } #endif /* LDAP_DEBUG */