Program: 20953
Project: 20953
Buggy source:
@Override public void handleFree(DownloadLink downloadLink) throws Exception {
  String url=null;
  for (int i=0; i < NUMBER_OF_RETRIES; i++) {
    if (url != null)     break;
    requestFileInformation(downloadLink);
    try {
      Recaptcha rc=new Recaptcha(br);
      Form form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
      String id=br.getRegex("String_Node_Str").getMatch(0);
      if (id != null) {
        rc.setId(id);
        InputField challenge=new InputField("String_Node_Str",null);
        InputField code=new InputField("String_Node_Str",null);
        form.addInputField(challenge);
        form.addInputField(code);
        rc.setForm(form);
        rc.load();
        File cf=rc.downloadCaptcha(getLocalCaptchaFile());
        try {
          String c=getCaptchaCode(cf,downloadLink);
          rc.setCode(c);
        }
 catch (        PluginException e) {
          throw new PluginException(LinkStatus.ERROR_IP_BLOCKED,5 * 60 * 1000l);
        }
      }
    }
 catch (    Exception e) {
      JDLogger.exception(e);
    }
    if (downloadLink.getStringProperty("String_Node_Str","String_Node_Str").equalsIgnoreCase("String_Node_Str")) {
      url=br.getRedirectLocation();
    }
 else {
      if (!br.containsHTML("String_Node_Str")) {
        String passCode;
        DownloadLink link=downloadLink;
        Form form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
        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);
        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_FATAL,JDL.L("String_Node_Str","String_Node_Str"));
        }
 else {
          link.setProperty("String_Node_Str",passCode);
        }
      }
      url=getDownloadUrl();
    }
  }
  if (url == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  dl=jd.plugins.BrowserAdapter.openDownload(br,downloadLink,url,true,0);
  if (!dl.getConnection().isContentDisposition()) {
    logger.info("String_Node_Str");
    br.followConnection();
    throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  }
  dl.startDownload();
}

Fixed version (ground truth):
@Override public void handleFree(DownloadLink downloadLink) throws Exception {
  String url=null;
  for (int i=0; i < NUMBER_OF_RETRIES; i++) {
    if (url != null)     break;
    requestFileInformation(downloadLink);
    try {
      Recaptcha rc=new Recaptcha(br);
      Form form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
      String id=br.getRegex("String_Node_Str").getMatch(0);
      if (id != null) {
        rc.setId(id);
        InputField challenge=new InputField("String_Node_Str",null);
        InputField code=new InputField("String_Node_Str",null);
        form.addInputField(challenge);
        form.addInputField(code);
        rc.setForm(form);
        rc.load();
        File cf=rc.downloadCaptcha(getLocalCaptchaFile());
        try {
          String c=getCaptchaCode(cf,downloadLink);
          rc.setCode(c);
        }
 catch (        PluginException e) {
          throw new PluginException(LinkStatus.ERROR_IP_BLOCKED,5 * 60 * 1000l);
        }
      }
    }
 catch (    Exception e) {
      JDLogger.exception(e);
    }
    if (downloadLink.getStringProperty("String_Node_Str","String_Node_Str").equalsIgnoreCase("String_Node_Str")) {
      logger.info("String_Node_Str");
      url=br.getRedirectLocation();
    }
 else {
      if (!br.containsHTML("String_Node_Str")) {
        String passCode;
        DownloadLink link=downloadLink;
        Form form=br.getFormbyProperty("String_Node_Str","String_Node_Str");
        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);
        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_FATAL,JDL.L("String_Node_Str","String_Node_Str"));
        }
 else {
          link.setProperty("String_Node_Str",passCode);
        }
      }
      url=getDownloadUrl();
    }
  }
  if (url == null)   throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  br.setFollowRedirects(true);
  dl=jd.plugins.BrowserAdapter.openDownload(br,downloadLink,url,true,0);
  if (!dl.getConnection().isContentDisposition()) {
    logger.info("String_Node_Str");
    br.followConnection();
    throw new PluginException(LinkStatus.ERROR_PLUGIN_DEFECT);
  }
  dl.startDownload();
}