]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/url.c
ldap_url_parse_ext(): Kill duplicate init + pointless free(NULL) of lud_filter.
[openldap] / libraries / libldap / url.c
index 87cfcbc14814f4c93961e3c2307114bf8c470a9c..5be36f872117026a5de4fc2dac14c55b0afe4f34 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2003 The OpenLDAP Foundation.
+ * Copyright 1998-2004 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -246,7 +246,7 @@ static int str2scope( const char *p )
        } else if ( strcasecmp( p, "subtree" ) == 0 ) {
                return LDAP_SCOPE_SUBTREE;
 
-#ifdef LDAP_FEATURE_SUBORDINATE_SCOPE
+#ifdef LDAP_SCOPE_SUBORDINATE
        } else if ( strcasecmp( p, "subordinate" ) == 0 ) {
                return LDAP_SCOPE_SUBORDINATE;
 
@@ -518,7 +518,6 @@ ldap_url_parse_ext( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
        ludp->lud_port = 0;
        ludp->lud_dn = NULL;
        ludp->lud_attrs = NULL;
-       ludp->lud_filter = NULL;
        ludp->lud_scope = LDAP_SCOPE_DEFAULT;
        ludp->lud_filter = NULL;
        ludp->lud_exts = NULL;
@@ -554,6 +553,8 @@ ldap_url_parse_ext( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
        }
 
        if ( q != NULL ) {
+               char    *next;
+
                *q++ = '\0';
                ldap_pvt_hex_unescape( q );
 
@@ -563,7 +564,12 @@ ldap_url_parse_ext( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
                        return LDAP_URL_ERR_BADURL;
                }
 
-               ludp->lud_port = atoi( q );
+               ludp->lud_port = strtol( q, &next, 10 );
+               if ( next == NULL || next[0] != '\0' ) {
+                       LDAP_FREE( url );
+                       ldap_free_urldesc( ludp );
+                       return LDAP_URL_ERR_BADURL;
+               }
        }
 
        ldap_pvt_hex_unescape( url );
@@ -718,7 +724,6 @@ ldap_url_parse_ext( LDAP_CONST char *url_in, LDAPURLDesc **ludpp )
                        return LDAP_URL_ERR_BADFILTER;
                }
 
-               LDAP_FREE( ludp->lud_filter );
                ludp->lud_filter = LDAP_STRDUP( p );
 
                if( ludp->lud_filter == NULL ) {
@@ -1003,9 +1008,14 @@ ldap_url_parsehosts(
                                }
                        }
                        if (p != NULL) {
+                               char    *next;
+
                                *p++ = 0;
                                ldap_pvt_hex_unescape(p);
-                               ludp->lud_port = atoi(p);
+                               ludp->lud_port = strtol( p, &next, 10 );
+                               if ( next == NULL || next[0] != '\0' ) {
+                                       return LDAP_PARAM_ERROR;
+                               }
                        }
                }
                ldap_pvt_hex_unescape(ludp->lud_host);