Program: 20701
Project: 20701
Buggy source:
/** 
 * Sets the extractionpath with subpahts.
 * @param controller
 */
private void assignRealDownloadDir(ExtractionController controller){
  Boolean usesub=this.getPluginConfig().getBooleanProperty(ExtractionConstants.CONFIG_KEY_USE_SUBPATH,false);
  if (usesub) {
    int min=this.getPluginConfig().getIntegerProperty(ExtractionConstants.CONFIG_KEY_SUBPATH_MINNUM,0);
    if (min > controller.getArchiv().getNumberOfFiles()) {
      return;
    }
    File dl=this.getExtractToPath(controller.getArchiv().getFirstDownloadLink());
    controller.getArchiv().setExtractTo(dl);
    ArrayList<DownloadLink> linkList=controller.getArchiv().getDownloadLinks();
    for (    DownloadLink l : linkList) {
      if (l == null)       continue;
      l.setProperty(ExtractionConstants.DOWNLOADLINK_KEY_EXTRACTEDPATH,dl.getAbsolutePath());
    }
  }
}

Fixed version (ground truth):
/** 
 * Sets the extractionpath with subpahts.
 * @param controller
 */
private void assignRealDownloadDir(ExtractionController controller){
  Boolean usesub=this.getPluginConfig().getBooleanProperty(ExtractionConstants.CONFIG_KEY_USE_SUBPATH,false);
  if (usesub) {
    if (this.getPluginConfig().getIntegerProperty(ExtractionConstants.CONFIG_KEY_SUBPATH_MINNUM,0) > controller.getArchiv().getNumberOfFiles()) {
      return;
    }
    if (!this.getPluginConfig().getBooleanProperty(ExtractionConstants.CONFIG_KEY_SUBPATH_NO_FOLDER,false) || controller.getArchiv().isNoFolder()) {
      return;
    }
    String path=this.getPluginConfig().getStringProperty(ExtractionConstants.CONFIG_KEY_SUBPATH,"String_Node_Str");
    DownloadLink link=controller.getArchiv().getFirstDownloadLink();
    try {
      if (link.getFilePackage().getName() != null) {
        path=path.replace("String_Node_Str",link.getFilePackage().getName());
      }
 else {
        path=path.replace("String_Node_Str","String_Node_Str");
        logger.severe("String_Node_Str" + controller.getArchiv().getFirstDownloadLink().getFileOutput());
      }
      if (controller.getExtractor().getArchiveName(link) != null) {
        path=path.replace("String_Node_Str",controller.getExtractor().getArchiveName(link));
      }
 else {
        logger.severe("String_Node_Str" + controller.getArchiv().getFirstDownloadLink().getFileOutput());
      }
      if (link.getHost() != null) {
        path=path.replace("String_Node_Str",link.getHost());
      }
 else {
        logger.severe("String_Node_Str" + controller.getArchiv().getFirstDownloadLink().getFileOutput());
      }
      String dif=new File(JDUtilities.getDefaultDownloadDirectory()).getAbsolutePath().replace(new File(link.getFileOutput()).getParent(),"String_Node_Str");
      if (new File(dif).isAbsolute()) {
        dif="String_Node_Str";
      }
      path=path.replace("String_Node_Str",dif);
      path=path.replaceAll("String_Node_Str","String_Node_Str");
      path=path.replaceAll("String_Node_Str","String_Node_Str");
      controller.getArchiv().setExtractTo(new File(controller.getArchiv().getExtractTo(),path));
    }
 catch (    Exception e) {
      JDLogger.exception(e);
    }
    for (    DownloadLink l : controller.getArchiv().getDownloadLinks()) {
      if (l == null)       continue;
      l.setProperty(ExtractionConstants.DOWNLOADLINK_KEY_EXTRACTEDPATH,controller.getArchiv().getExtractTo().getAbsolutePath());
    }
  }
}