Program: 20961
Project: 20961
Buggy source:
@Override public void handleFree(DownloadLink downloadLink) throws Exception {
  requestFileInformation(downloadLink);
synchronized (LOCK) {
    if (this.isAborted(downloadLink))     return;
  }
  if (br.containsHTML("String_Node_Str")) {
    int wait=60;
    String time=br.getRegex("String_Node_Str").getMatch(0);
    if (time != null)     wait=Integer.parseInt(time);
    throw new PluginException(LinkStatus.ERROR_IP_BLOCKED,wait * 1000l * 60);
  }
  Form freeform=br.getFormbyProperty("String_Node_Str","String_Node_Str");
  if (freeform == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  freeform.setAction(downloadLink.getDownloadURL());
  freeform.remove("String_Node_Str");
  br.submitForm(freeform);
  if (br.containsHTML("String_Node_Str")) {
    String passCode;
    DownloadLink link=downloadLink;
    Form form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
    if (form == null)     throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
    if (link.getStringProperty("String_Node_Str",null) == null) {
      passCode=Plugin.getUserInput(null,link);
    }
 else {
      passCode=link.getStringProperty("String_Node_Str",null);
    }
    form.put("String_Node_Str",passCode);
    form.setAction(downloadLink.getDownloadURL());
    br.submitForm(form);
    form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
    if (form != null && br.containsHTML("String_Node_Str")) {
      link.setProperty("String_Node_Str",null);
      throw new PluginException(LinkStatus.ERROR_RETRY,JDL.L("String_Node_Str","String_Node_Str"));
    }
 else {
      link.setProperty("String_Node_Str",passCode);
    }
  }
  Form downloadForm=br.getForm(1);
  if (downloadForm == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  String current=br.getRegex("String_Node_Str").getMatch(0);
  if (current == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  String wait=br.getRegex("String_Node_Str").getMatch(0);
  if (wait != null)   sleep(Long.parseLong(wait.trim()) * 1000,downloadLink);
  downloadForm.put("String_Node_Str",current);
  downloadForm.put("String_Node_Str","String_Node_Str");
  downloadForm.put("String_Node_Str","String_Node_Str");
  downloadForm.setAction(downloadLink.getDownloadURL());
  br.setFollowRedirects(true);
  br.setDebug(true);
  dl=jd.plugins.BrowserAdapter.openDownload(br,downloadLink,downloadForm,true,0);
  if (!(dl.getConnection().isContentDisposition()) && !dl.getConnection().getContentType().contains("String_Node_Str")) {
    dl.getConnection().disconnect();
    throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  }
  dl.startDownload();
}

Fixed version (ground truth):
@Override public void handleFree(DownloadLink downloadLink) throws Exception {
  requestFileInformation(downloadLink);
synchronized (LOCK) {
    if (this.isAborted(downloadLink))     return;
  }
  if (br.containsHTML("String_Node_Str")) {
    int wait=60;
    String time=br.getRegex("String_Node_Str").getMatch(0);
    if (time != null)     wait=Integer.parseInt(time);
    throw new PluginException(LinkStatus.ERROR_IP_BLOCKED,wait * 1000l * 60);
  }
  Form freeform=br.getFormbyProperty("String_Node_Str","String_Node_Str");
  if (freeform == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  freeform.setAction(downloadLink.getDownloadURL());
  freeform.remove("String_Node_Str");
  br.submitForm(freeform);
  if (br.containsHTML("String_Node_Str")) {
    String passCode;
    DownloadLink link=downloadLink;
    Form form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
    if (form == null)     throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
    if (link.getStringProperty("String_Node_Str",null) == null) {
      passCode=Plugin.getUserInput(null,link);
    }
 else {
      passCode=link.getStringProperty("String_Node_Str",null);
    }
    form.put("String_Node_Str",passCode);
    form.setAction(downloadLink.getDownloadURL());
    br.submitForm(form);
    form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
    if (form != null && br.containsHTML("String_Node_Str")) {
      link.setProperty("String_Node_Str",null);
      throw new PluginException(LinkStatus.ERROR_RETRY,JDL.L("String_Node_Str","String_Node_Str"));
    }
 else {
      link.setProperty("String_Node_Str",passCode);
    }
  }
  Form downloadForm=br.getForm(1);
  if (downloadForm == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  String current=br.getRegex("String_Node_Str").getMatch(0);
  if (current == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  String wait=br.getRegex("String_Node_Str").getMatch(0);
  if (wait != null)   sleep(Long.parseLong(wait.trim()) * 1000,downloadLink);
  downloadForm.put("String_Node_Str",current);
  downloadForm.put("String_Node_Str","String_Node_Str");
  downloadForm.put("String_Node_Str","String_Node_Str");
  downloadForm.setAction(downloadLink.getDownloadURL());
  br.setFollowRedirects(true);
  br.setDebug(true);
  dl=jd.plugins.BrowserAdapter.openDownload(br,downloadLink,downloadForm,true,0);
  if (!(dl.getConnection().isContentDisposition()) && !dl.getConnection().getContentType().contains("String_Node_Str")) {
    dl.getConnection().disconnect();
    if (br.containsHTML("String_Node_Str"))     throw new PluginException(LinkStatus.ERROR_TEMPORARILY_UNAVAILABLE,15 * 60 * 1001l);
    throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  }
  dl.startDownload();
}