]> git.sur5r.net Git - openldap/commitdiff
Declare enough buffer space for out-of-range URL port numbers
authorQuanah Gibson-Mount <quanah@openldap.org>
Sat, 9 Feb 2008 00:51:52 +0000 (00:51 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Sat, 9 Feb 2008 00:51:52 +0000 (00:51 +0000)
libraries/libldap/url.c

index 4ef41f5ef492874e0acfb408b9e727d1ec967cdd..882d21da30c3919a6969eca9e8abe86a682b7829 100644 (file)
@@ -582,19 +582,17 @@ desc2str_len( LDAPURLDesc *u )
        len += sep;
 
        if ( u->lud_port ) {
-               char    buf[ STRLENOF(":65535") + 1 ];
+               unsigned p = u->lud_port;
+               if ( p > 65535 )
+                       return -1;
 
-               len += snprintf( buf, sizeof( buf ), ":%d", u->lud_port );
-               if ( u->lud_host && u->lud_host[0] ) {
-                       len += strlen( u->lud_host );
-               }
+               len += (p > 999 ? 5 + (p > 9999) : p > 99 ? 4 : 2 + (p > 9));
+       }
 
-       } else {
-               if ( u->lud_host && u->lud_host[0] ) {
-                       len += hex_escape_len( u->lud_host, URLESC_SLASH );
-                       if ( !is_ipc && strchr( u->lud_host, ':' )) {
-                               len += 2;       /* IPv6, [] */
-                       }
+       if ( u->lud_host && u->lud_host[0] ) {
+               len += hex_escape_len( u->lud_host, URLESC_SLASH );
+               if ( !is_ipc && strchr( u->lud_host, ':' )) {
+                       len += 2;       /* IPv6, [] */
                }
        }