Program: 79892
Project: 79892
Buggy source:
@Override public List<CacheEntry> getObjectList(final String bucketName,final String objectNamePrefix,final String delimiter,Set<String> returnedPrefixes) throws IOException {
  LOG.debug("String_Node_Str",bucketName,objectNamePrefix,delimiter);
  Preconditions.checkArgument(delimiter == null || "String_Node_Str".equals(delimiter),"String_Node_Str",delimiter);
  StorageResourceId listBase=null;
  if (Strings.isNullOrEmpty(objectNamePrefix)) {
    listBase=new StorageResourceId(bucketName);
  }
 else {
    int indexOfDelim=objectNamePrefix.lastIndexOf('/');
    if (indexOfDelim == -1) {
      listBase=new StorageResourceId(bucketName);
    }
 else {
      String objectToList=objectNamePrefix.substring(0,indexOfDelim + 1);
      listBase=new StorageResourceId(bucketName,objectToList);
    }
  }
  LOG.debug("String_Node_Str",listBase);
  Preconditions.checkState(listBase != null,"String_Node_Str");
  validateResourceId(listBase);
  final Path listBasePath=getMirrorPath(listBase);
  File listBaseFile=listBasePath.toFile();
  if (!listBaseFile.exists()) {
    LOG.debug("String_Node_Str",listBaseFile,listBase);
    return null;
  }
  final List<CacheEntry> cacheEntries=new ArrayList<>();
  final Path bucketBasePath=getMirrorPath(new StorageResourceId(bucketName));
  final FileCallback fileVisitor=new FileCallback(){
    public void run(    File candidateFile) throws IOException {
      Path objectNamePath=bucketBasePath.relativize(candidateFile.toPath());
      String objectNamePathString=objectNamePath.toString();
      if (candidateFile.isDirectory()) {
        objectNamePathString=StorageResourceId.convertToDirectoryPath(objectNamePathString);
      }
      StorageResourceId objectId=new StorageResourceId(bucketName,objectNamePathString);
      CacheEntry entry=new CacheEntry(objectId,candidateFile.lastModified());
      if (isCacheEntryExpired(entry)) {
        LOG.debug("String_Node_Str",objectId);
        removeResourceId(objectId);
      }
 else {
        String objectName=objectId.getObjectName();
        String matchedName=GoogleCloudStorageStrings.matchListPrefix(objectNamePrefix,delimiter,objectName);
        if (matchedName != null && objectName.equals(matchedName)) {
          LOG.debug("String_Node_Str",objectId);
          cacheEntries.add(entry);
        }
      }
    }
  }
;
  if (delimiter != null) {
    File[] fileList=listBaseFile.listFiles();
    if (fileList != null) {
      for (      File object : fileList) {
        fileVisitor.run(object);
      }
    }
 else {
      LOG.warn("String_Node_Str",listBaseFile);
      return null;
    }
  }
 else {
    Files.walkFileTree(listBasePath,new SimpleFileVisitor<Path>(){
      @Override public FileVisitResult postVisitDirectory(      Path dir,      IOException ioe) throws IOException {
        if (!listBasePath.equals(dir)) {
          fileVisitor.run(dir.toFile());
        }
        return FileVisitResult.CONTINUE;
      }
      @Override public FileVisitResult visitFile(      Path file,      BasicFileAttributes attrs) throws IOException {
        fileVisitor.run(file.toFile());
        return FileVisitResult.CONTINUE;
      }
    }
);
  }
  return cacheEntries;
}

Fixed version (ground truth):
@Override public List<CacheEntry> getObjectList(final String bucketName,final String objectNamePrefix,final String delimiter,Set<String> returnedPrefixes) throws IOException {
  LOG.debug("String_Node_Str",bucketName,objectNamePrefix,delimiter);
  Preconditions.checkArgument(delimiter == null || "String_Node_Str".equals(delimiter),"String_Node_Str",delimiter);
  StorageResourceId listBase;
  if (Strings.isNullOrEmpty(objectNamePrefix)) {
    listBase=new StorageResourceId(bucketName);
  }
 else {
    int indexOfDelim=objectNamePrefix.lastIndexOf('/');
    if (indexOfDelim == -1) {
      listBase=new StorageResourceId(bucketName);
    }
 else {
      String objectToList=objectNamePrefix.substring(0,indexOfDelim + 1);
      listBase=new StorageResourceId(bucketName,objectToList);
    }
  }
  LOG.debug("String_Node_Str",listBase);
  validateResourceId(listBase);
  final Path listBasePath=getMirrorPath(listBase);
  File listBaseFile=listBasePath.toFile();
  if (!listBaseFile.exists()) {
    LOG.debug("String_Node_Str",listBaseFile,listBase);
    return null;
  }
  final List<CacheEntry> cacheEntries=new ArrayList<>();
  final Path bucketBasePath=getMirrorPath(new StorageResourceId(bucketName));
  final FileCallback fileVisitor=new FileCallback(){
    @Override public void run(    File candidateFile) throws IOException {
      Path objectNamePath=bucketBasePath.relativize(candidateFile.toPath());
      String objectNamePathString=objectNamePath.toString();
      if (candidateFile.isDirectory()) {
        objectNamePathString=StorageResourceId.convertToDirectoryPath(objectNamePathString);
      }
      StorageResourceId objectId=new StorageResourceId(bucketName,objectNamePathString);
      CacheEntry entry=new CacheEntry(objectId,candidateFile.lastModified());
      if (isCacheEntryExpired(entry)) {
        LOG.debug("String_Node_Str",objectId);
        removeResourceId(objectId);
      }
 else {
        String objectName=objectId.getObjectName();
        String matchedName=GoogleCloudStorageStrings.matchListPrefix(objectNamePrefix,delimiter,objectName);
        if (matchedName != null && objectName.equals(matchedName)) {
          LOG.debug("String_Node_Str",objectId);
          cacheEntries.add(entry);
        }
      }
    }
  }
;
  if (delimiter != null) {
    File[] fileList=listBaseFile.listFiles();
    if (fileList != null) {
      for (      File object : fileList) {
        fileVisitor.run(object);
      }
    }
 else {
      LOG.warn("String_Node_Str",listBaseFile);
      return null;
    }
  }
 else {
    Files.walkFileTree(listBasePath,new SimpleFileVisitor<Path>(){
      @Override public FileVisitResult postVisitDirectory(      Path dir,      IOException ioe) throws IOException {
        if (!listBasePath.equals(dir)) {
          fileVisitor.run(dir.toFile());
        }
        return FileVisitResult.CONTINUE;
      }
      @Override public FileVisitResult visitFile(      Path file,      BasicFileAttributes attrs) throws IOException {
        fileVisitor.run(file.toFile());
        return FileVisitResult.CONTINUE;
      }
    }
);
  }
  return cacheEntries;
}