Buggy code:
public class SolrZkClient { public static final AtomicLong numOpens = new AtomicLong ( ) ; public static final AtomicLong numCloses = new AtomicLong ( ) ; static final String NEWL = System . getProperty ( "line.separator" ) ; static final int DEFAULT_CLIENT_CONNECT_TIMEOUT = 30000 ; private static final Logger log = LoggerFactory . getLogger ( SolrZkClient . class ) ; private ConnectionManager connManager ; private volatile SolrZooKeeper keeper ; private ZkCmdExecutor zkCmdExecutor ; private volatile boolean isClosed = false ; private ZkClientConnectionStrategy zkClientConnectionStrategy ; private int zkClientTimeout ; public int getZkClientTimeout ( ) { } public SolrZkClient ( String zkServerAddress , int zkClientTimeout ) { } public SolrZkClient ( String zkServerAddress , int zkClientTimeout , int zkClientConnectTimeout , OnReconnect onReonnect ) { } public SolrZkClient ( String zkServerAddress , int zkClientTimeout , ZkClientConnectionStrategy strat , final OnReconnect onReconnect ) { } public SolrZkClient ( String zkServerAddress , int zkClientTimeout , ZkClientConnectionStrategy strat , final OnReconnect onReconnect , int clientConnectTimeout ) { } public ZkClientConnectionStrategy getZkClientConnectionStrategy ( ) { } public boolean isConnected ( ) { } public void delete ( final String path , final int version , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public Stat exists ( final String path , final Watcher watcher , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public Boolean exists ( final String path , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public String create ( final String path , final byte [ ] data , final List < ACL > acl , final CreateMode createMode , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public List < String > getChildren ( final String path , final Watcher watcher , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public byte [ ] getData ( final String path , final Watcher watcher , final Stat stat , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public Stat setData ( final String path , final byte [ ] data , final int version , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public String create ( final String path , final byte [ ] data , final CreateMode createMode , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String path , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String path , boolean failOnExists , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String path , File file , boolean failOnExists , boolean retryOnConnLoss ) throws IOException , InterruptedException , KeeperException { } public void makePath ( String path , File file , boolean retryOnConnLoss ) throws IOException , InterruptedException , KeeperException { } public void makePath ( String path , CreateMode createMode , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String path , byte [ ] data , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String path , byte [ ] data , CreateMode createMode , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String path , byte [ ] data , CreateMode createMode , Watcher watcher , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String path , byte [ ] data , CreateMode createMode , Watcher watcher , boolean failOnExists , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void makePath ( String zkPath , CreateMode createMode , Watcher watcher , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void setData ( String path , byte [ ] data , boolean retryOnConnLoss ) throws InterruptedException , KeeperException { } public void setData ( String path , File file , boolean retryOnConnLoss ) throws IOException , InterruptedException , KeeperException { } public String getBaseUrlForNodeName ( final String nodeName ) { final int _offset = nodeName . indexOf ( "_" ) ; if ( _offset < 0 ) { throw new IllegalArgumentException ( ( "nodeName<seq2seq4repair_space>does<seq2seq4repair_space>not<seq2seq4repair_space>contain<seq2seq4repair_space>expected<seq2seq4repair_space>'_'<seq2seq4repair_space>seperator:<seq2seq4repair_space>" + nodeName ) ) ; } final String hostAndPort = nodeName . substring ( 0 , _offset ) ; try { final String path = URLDecoder . decode ( nodeName . substring ( ( 1 + _offset ) ) , "UTF-8" ) ; <START_BUG> return ( ( "http:////" + hostAndPort ) + "//" ) + path ; <END_BUG> } catch ( UnsupportedEncodingException e ) { throw new IllegalStateException ( "JVM<seq2seq4repair_space>Does<seq2seq4repair_space>not<seq2seq4repair_space>seem<seq2seq4repair_space>to<seq2seq4repair_space>support<seq2seq4repair_space>UTF-8" , e ) ; } } public void printLayout ( String path , int indent , StringBuilder string ) throws InterruptedException , KeeperException { } public void printLayoutToStdOut ( ) throws InterruptedException , KeeperException { } public static String prettyPrint ( String input , int indent ) { } private static String prettyPrint ( String input ) { } public void close ( ) { } public boolean isClosed ( ) { } void updateKeeper ( SolrZooKeeper keeper ) throws InterruptedException { } public SolrZooKeeper getSolrZooKeeper ( ) { } private void closeKeeper ( SolrZooKeeper keeper ) { } public void clean ( String path ) throws InterruptedException , KeeperException { } }

Fix:
return ( "http:////" + hostAndPort ) + ( path . isEmpty ( ) ? "" : "//" + path ) ;