diff --git a/CHANGES b/CHANGES
index ed677b988750c470d1390434ff909ecaffc81aa6..f170c2e5eed9c3ef7606339552164562fe4b460e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,7 @@ OpenLDAP 2.4.24 Engineering
 	Fixed liblber to not close invalid sockets (ITS#6585)
 	Fixed libldap dnssrv port format specifier (ITS#6644)
 	Fixed libldap sasl partial write handling (ITS#6639)
+	Fixed libldap url parsing with NULL host (ITS#6653)
 	Fixed ldapsearch segfault with deref (ITS#6638)
 	Fixed slapd acl parsing overflow (ITS#6611)
 	Fixed slapd modify to return actual error (ITS#6581)
diff --git a/libraries/libldap/url.c b/libraries/libldap/url.c
index 2c4094cb9c67f466295e94f1bb985ce017e74ceb..4e641a37063b75eb0a681323fe4ec39f45113432 100644
--- a/libraries/libldap/url.c
+++ b/libraries/libldap/url.c
@@ -1425,6 +1425,7 @@ ldap_url_list2hosts (LDAPURLDesc *ludlist)
 	/* figure out how big the string is */
 	size = 1;	/* nul-term */
 	for (ludp = ludlist; ludp != NULL; ludp = ludp->lud_next) {
+		if ( ludp->lud_host == NULL ) continue;
 		size += strlen(ludp->lud_host) + 1;		/* host and space */
 		if (strchr(ludp->lud_host, ':'))        /* will add [ ] below */
 			size += 2;
@@ -1437,6 +1438,7 @@ ldap_url_list2hosts (LDAPURLDesc *ludlist)
 
 	p = s;
 	for (ludp = ludlist; ludp != NULL; ludp = ludp->lud_next) {
+		if ( ludp->lud_host == NULL ) continue;
 		if (strchr(ludp->lud_host, ':')) {
 			p += sprintf(p, "[%s]", ludp->lud_host);
 		} else {
@@ -1449,7 +1451,7 @@ ldap_url_list2hosts (LDAPURLDesc *ludlist)
 	}
 	if (p != s)
 		p--;	/* nuke that extra space */
-	*p = 0;
+	*p = '\0';
 	return s;
 }