Program: 82442
Project: 82442
Buggy source:
@Override public TableDescriptor getTableDescriptor(boolean useCache,String cluster,String table){
  if (useCache) {
    TableDescriptor tableDescriptor=_tableDescriptorCache.get(table);
    updateEnabled(useCache,tableDescriptor,cluster,table);
    if (tableDescriptor != null) {
      return tableDescriptor;
    }
  }
  long s=System.nanoTime();
  TableDescriptor tableDescriptor=new TableDescriptor();
  try {
    checkIfOpen();
    NullPointerException npe=null;
    LOOP:     for (int i=0; i < 10; i++) {
      npe=null;
      try {
        tableDescriptor.shardCount=Integer.parseInt(new String(getData(ZookeeperPathConstants.getTableShardCountPath(cluster,table))));
        tableDescriptor.tableUri=new String(getData(ZookeeperPathConstants.getTableUriPath(cluster,table)));
        tableDescriptor.blockCaching=isBlockCacheEnabled(cluster,table);
        tableDescriptor.blockCachingFileTypes=getBlockCacheFileTypes(cluster,table);
        tableDescriptor.name=table;
        tableDescriptor.readOnly=internalGetReadOnly(ZookeeperPathConstants.getTableReadOnlyPath(cluster,table));
        tableDescriptor.preCacheCols=toList(getData(ZookeeperPathConstants.getTableColumnsToPreCache(cluster,table)));
        byte[] data=getData(ZookeeperPathConstants.getTableSimilarityPath(cluster,table));
        if (data != null) {
          tableDescriptor.similarityClass=new String(data);
        }
        updateEnabled(useCache,tableDescriptor,cluster,table);
        break LOOP;
      }
 catch (      NullPointerException e) {
        npe=e;
        LOG.warn("String_Node_Str");
        Thread.sleep(TimeUnit.SECONDS.toMillis(3));
      }
    }
    if (npe != null) {
      throw npe;
    }
  }
 catch (  KeeperException e) {
    throw new RuntimeException(e);
  }
catch (  InterruptedException e) {
    throw new RuntimeException(e);
  }
 finally {
    long e=System.nanoTime();
    LOG.debug("String_Node_Str" + (e - s) / 1000000.0 + "String_Node_Str");
  }
  tableDescriptor.cluster=cluster;
  _tableDescriptorCache.put(table,tableDescriptor);
  return tableDescriptor;
}

Fixed version (ground truth):
@Override public TableDescriptor getTableDescriptor(boolean useCache,String cluster,String table){
  if (useCache) {
    TableDescriptor tableDescriptor=_tableDescriptorCache.get(table);
    updateEnabled(useCache,tableDescriptor,cluster,table);
    if (tableDescriptor != null) {
      return tableDescriptor;
    }
  }
  long s=System.nanoTime();
  TableDescriptor tableDescriptor=new TableDescriptor();
  try {
    checkIfOpen();
    NullPointerException npe=null;
    LOOP:     for (int i=0; i < 10; i++) {
      npe=null;
      try {
        tableDescriptor.shardCount=Integer.parseInt(new String(getData(ZookeeperPathConstants.getTableShardCountPath(cluster,table))));
        tableDescriptor.tableUri=new String(getData(ZookeeperPathConstants.getTableUriPath(cluster,table)));
        tableDescriptor.blockCaching=isBlockCacheEnabled(cluster,table);
        tableDescriptor.blockCachingFileTypes=getBlockCacheFileTypes(cluster,table);
        tableDescriptor.name=table;
        tableDescriptor.readOnly=internalGetReadOnly(ZookeeperPathConstants.getTableReadOnlyPath(cluster,table));
        tableDescriptor.preCacheCols=toList(getData(ZookeeperPathConstants.getTableColumnsToPreCache(cluster,table)));
        tableDescriptor.tableProperties=toMap(getData(ZookeeperPathConstants.getTablePropertiesPath(cluster,table)));
        byte[] data=getData(ZookeeperPathConstants.getTableSimilarityPath(cluster,table));
        if (data != null) {
          tableDescriptor.similarityClass=new String(data);
        }
        updateEnabled(useCache,tableDescriptor,cluster,table);
        break LOOP;
      }
 catch (      NullPointerException e) {
        npe=e;
        LOG.warn("String_Node_Str");
        Thread.sleep(TimeUnit.SECONDS.toMillis(3));
      }
    }
    if (npe != null) {
      throw npe;
    }
  }
 catch (  KeeperException e) {
    throw new RuntimeException(e);
  }
catch (  InterruptedException e) {
    throw new RuntimeException(e);
  }
 finally {
    long e=System.nanoTime();
    LOG.debug("String_Node_Str" + (e - s) / 1000000.0 + "String_Node_Str");
  }
  tableDescriptor.cluster=cluster;
  _tableDescriptorCache.put(table,tableDescriptor);
  return tableDescriptor;
}