Program: 8846
Project: 8846
Buggy source:
/** 
 * Extract and copy DK II interface texts
 * @param dungeonKeeperFolder DK II main folder
 * @param destination Destination folder
 */
private void convertTexts(String dungeonKeeperFolder,String destination){
  if (!ConvertProcess.INTERFACE_TEXTS.isOutdated()) {
    return;
  }
  logger.log(Level.INFO,"String_Node_Str",destination);
  updateStatus(null,null,ConvertProcess.INTERFACE_TEXTS);
  AssetUtils.deleteFolder(new File(destination));
  String dataDirectory=dungeonKeeperFolder + PathUtils.DKII_TEXT_DEFAULT_FOLDER;
  final List<File> srtFiles=new ArrayList<>();
  File dataDir=new File(dataDirectory);
  try {
    Files.walkFileTree(dataDir.toPath(),EnumSet.noneOf(FileVisitOption.class),1,new SimpleFileVisitor<Path>(){
      @Override public FileVisitResult visitFile(      Path file,      BasicFileAttributes attrs) throws IOException {
        if (attrs.isRegularFile() && file.getFileName().toString().toLowerCase().endsWith("String_Node_Str")) {
          srtFiles.add(file.toFile());
        }
        return FileVisitResult.CONTINUE;
      }
    }
);
  }
 catch (  IOException ex) {
    String msg="String_Node_Str" + dataDirectory + "String_Node_Str";
    logger.log(Level.SEVERE,msg,ex);
    throw new RuntimeException(msg,ex);
  }
  new File(destination).mkdirs();
  int i=0;
  int total=srtFiles.size();
  CharBuffer codePage=null;
  for (  File file : srtFiles) {
    updateStatus(i,total,ConvertProcess.INTERFACE_TEXTS);
    i++;
    StrFile strFile;
    if (codePage == null) {
      strFile=new StrFile(file);
      codePage=strFile.getCodePage();
    }
 else {
      strFile=new StrFile(codePage,file);
    }
    String fileName=file.getName();
    fileName=fileName.substring(0,fileName.length() - 3);
    File dictFile=new File(destination.concat(fileName).concat("String_Node_Str"));
    try (PrintWriter pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream(dictFile,false),"String_Node_Str"))){
      for (      Map.Entry<Integer,String> entry : strFile.getEntriesAsSet()) {
        pw.println(entry.getKey() + "String_Node_Str" + entry.getValue());
      }
    }
 catch (    IOException ex) {
      String msg="String_Node_Str" + dictFile + "String_Node_Str";
      logger.log(Level.SEVERE,msg,ex);
      throw new RuntimeException(msg,ex);
    }
  }
}

Fixed version (ground truth):
/** 
 * Extract and copy DK II interface texts
 * @param dungeonKeeperFolder DK II main folder
 * @param destination Destination folder
 */
private void convertTexts(String dungeonKeeperFolder,String destination){
  if (!ConvertProcess.INTERFACE_TEXTS.isOutdated()) {
    return;
  }
  LOGGER.log(Level.INFO,"String_Node_Str",destination);
  updateStatus(null,null,ConvertProcess.INTERFACE_TEXTS);
  AssetUtils.deleteFolder(new File(destination));
  String dataDirectory=dungeonKeeperFolder + PathUtils.DKII_TEXT_DEFAULT_FOLDER;
  final List<File> srtFiles=new ArrayList<>();
  File dataDir=new File(dataDirectory);
  try {
    Files.walkFileTree(dataDir.toPath(),EnumSet.noneOf(FileVisitOption.class),1,new SimpleFileVisitor<Path>(){
      @Override public FileVisitResult visitFile(      Path file,      BasicFileAttributes attrs) throws IOException {
        if (attrs.isRegularFile() && file.getFileName().toString().toLowerCase().endsWith("String_Node_Str")) {
          srtFiles.add(file.toFile());
        }
        return FileVisitResult.CONTINUE;
      }
    }
);
  }
 catch (  IOException ex) {
    String msg="String_Node_Str" + dataDirectory + "String_Node_Str";
    LOGGER.log(Level.SEVERE,msg,ex);
    throw new RuntimeException(msg,ex);
  }
  new File(destination).mkdirs();
  int i=0;
  int total=srtFiles.size();
  CharBuffer codePage=null;
  for (  File file : srtFiles) {
    updateStatus(i,total,ConvertProcess.INTERFACE_TEXTS);
    i++;
    StrFile strFile;
    if (codePage == null) {
      strFile=new StrFile(file);
      codePage=strFile.getCodePage();
    }
 else {
      strFile=new StrFile(codePage,file);
    }
    String fileName=file.getName();
    fileName=fileName.substring(0,fileName.length() - 3);
    File dictFile=new File(destination.concat(fileName).concat("String_Node_Str"));
    try (PrintWriter pw=new PrintWriter(new OutputStreamWriter(new FileOutputStream(dictFile,false),"String_Node_Str"))){
      for (      Map.Entry<Integer,String> entry : strFile.getEntriesAsSet()) {
        pw.println(entry.getKey() + "String_Node_Str" + entry.getValue());
      }
    }
 catch (    IOException ex) {
      String msg="String_Node_Str" + dictFile + "String_Node_Str";
      LOGGER.log(Level.SEVERE,msg,ex);
      throw new RuntimeException(msg,ex);
    }
  }
}