Program: 8838
Project: 8838
Buggy source:
/** 
 * Extract and convert DK II font files (BF4)
 * @param dungeonKeeperFolder DK II main folder
 * @param destination Destination folder
 */
private void convertFonts(final String dungeonKeeperFolder,final String destination){
  if (!ConvertProcess.FONTS.isOutdated()) {
    return;
  }
  logger.log(Level.INFO,"String_Node_Str",destination);
  updateStatus(null,null,ConvertProcess.FONTS);
  AssetUtils.deleteFolder(new File(destination));
  try {
    new File(destination).mkdirs();
    final List<File> bf4Files=new ArrayList<>();
    Files.walkFileTree(new File(dungeonKeeperFolder + PathUtils.DKII_TEXT_DEFAULT_FOLDER).toPath(),new SimpleFileVisitor<Path>(){
      @Override public FileVisitResult visitFile(      Path file,      BasicFileAttributes attrs) throws IOException {
        if (attrs.isRegularFile() && file.getFileName().toString().toLowerCase().endsWith("String_Node_Str")) {
          bf4Files.add(file.toFile());
        }
        return FileVisitResult.CONTINUE;
      }
    }
);
    int i=0;
    int total=bf4Files.size();
    Pattern pattern=Pattern.compile("String_Node_Str",Pattern.CASE_INSENSITIVE);
    for (    File file : bf4Files) {
      updateStatus(i,total,ConvertProcess.FONTS);
      final int fontSize;
      final String imageFileName;
      final String descriptionFileName;
      Matcher matcher=pattern.matcher(file.getName());
      boolean found=matcher.find();
      if (!found) {
        logger.log(Level.SEVERE,"String_Node_Str",file.getName());
        throw new RuntimeException("String_Node_Str");
      }
 else {
        fontSize=Integer.parseInt(matcher.group("String_Node_Str"));
        String baseFileName=matcher.group("String_Node_Str");
        baseFileName=destination.concat(Character.toUpperCase(baseFileName.charAt(0)) + baseFileName.substring(1).toLowerCase() + fontSize);
        imageFileName=baseFileName.concat("String_Node_Str");
        descriptionFileName=baseFileName.concat("String_Node_Str");
      }
      FontCreator fc=new FontCreator(new Bf4File(file)){
        @Override protected int getFontSize(){
          return fontSize;
        }
        @Override protected String getFileName(){
          return imageFileName.substring(destination.length());
        }
      }
;
      ImageIO.write(fc.getFontImage(),"String_Node_Str",new File(imageFileName));
      try (OutputStreamWriter out=new OutputStreamWriter(new FileOutputStream(descriptionFileName))){
        out.write(fc.getDescription());
      }
       i++;
    }
  }
 catch (  Exception ex) {
    String msg="String_Node_Str" + destination + "String_Node_Str";
    logger.log(Level.SEVERE,msg,ex);
    throw new RuntimeException(msg,ex);
  }
}

Fixed version (ground truth):
/** 
 * Extract and convert DK II font files (BF4)
 * @param dungeonKeeperFolder DK II main folder
 * @param destination Destination folder
 */
private void convertFonts(final String dungeonKeeperFolder,final String destination){
  if (!ConvertProcess.FONTS.isOutdated()) {
    return;
  }
  LOGGER.log(Level.INFO,"String_Node_Str",destination);
  updateStatus(null,null,ConvertProcess.FONTS);
  AssetUtils.deleteFolder(new File(destination));
  try {
    new File(destination).mkdirs();
    final List<File> bf4Files=new ArrayList<>();
    Files.walkFileTree(new File(dungeonKeeperFolder + PathUtils.DKII_TEXT_DEFAULT_FOLDER).toPath(),new SimpleFileVisitor<Path>(){
      @Override public FileVisitResult visitFile(      Path file,      BasicFileAttributes attrs) throws IOException {
        if (attrs.isRegularFile() && file.getFileName().toString().toLowerCase().endsWith("String_Node_Str")) {
          bf4Files.add(file.toFile());
        }
        return FileVisitResult.CONTINUE;
      }
    }
);
    int i=0;
    int total=bf4Files.size();
    Pattern pattern=Pattern.compile("String_Node_Str",Pattern.CASE_INSENSITIVE);
    for (    File file : bf4Files) {
      updateStatus(i,total,ConvertProcess.FONTS);
      final int fontSize;
      final String imageFileName;
      final String descriptionFileName;
      Matcher matcher=pattern.matcher(file.getName());
      boolean found=matcher.find();
      if (!found) {
        LOGGER.log(Level.SEVERE,"String_Node_Str",file.getName());
        throw new RuntimeException("String_Node_Str");
      }
 else {
        fontSize=Integer.parseInt(matcher.group("String_Node_Str"));
        String baseFileName=matcher.group("String_Node_Str");
        baseFileName=destination.concat(Character.toUpperCase(baseFileName.charAt(0)) + baseFileName.substring(1).toLowerCase() + fontSize);
        imageFileName=baseFileName.concat("String_Node_Str");
        descriptionFileName=baseFileName.concat("String_Node_Str");
      }
      FontCreator fc=new FontCreator(new Bf4File(file)){
        @Override protected int getFontSize(){
          return fontSize;
        }
        @Override protected String getFileName(){
          return imageFileName.substring(destination.length());
        }
      }
;
      ImageIO.write(fc.getFontImage(),"String_Node_Str",new File(imageFileName));
      try (OutputStreamWriter out=new OutputStreamWriter(new FileOutputStream(descriptionFileName))){
        out.write(fc.getDescription());
      }
       i++;
    }
  }
 catch (  Exception ex) {
    String msg="String_Node_Str" + destination + "String_Node_Str";
    LOGGER.log(Level.SEVERE,msg,ex);
    throw new RuntimeException(msg,ex);
  }
}