Program: 94473
Project: 94473
Buggy source:
protected void openStreams() throws IncomingFileTransferException {
  Trace.entering(Activator.PLUGIN_ID,DebugOptions.METHODS_ENTERING,this.getClass(),"String_Node_Str");
  final String urlString=getRemoteFileURL().toString();
  this.doneFired=false;
  int code=-1;
  try {
    httpClient.getHttpConnectionManager().getParams().setSoTimeout(DEFAULT_READ_TIMEOUT);
    httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(DEFAULT_CONNECTION_TIMEOUT);
    setupAuthentication(urlString);
    setupHostAndPort(urlString);
    getMethod=new GzipGetMethod(hostConfigHelper.getTargetRelativePath());
    getMethod.setFollowRedirects(true);
    getMethod.getParams().setParameter(CredentialsProvider.PROVIDER,new ECFCredentialsProvider());
    setRequestHeaderValues();
    Trace.trace(Activator.PLUGIN_ID,"String_Node_Str" + urlString);
    if (getFileRangeSpecification() == null)     getMethod.setRequestHeader(GzipGetMethod.ACCEPT_ENCODING,GzipGetMethod.CONTENT_ENCODING_ACCEPTED);
    fireConnectStartEvent();
    if (checkAndHandleDone()) {
      return;
    }
    connectingSockets.clear();
    if (connectJob == null) {
      performConnect(new NullProgressMonitor());
    }
 else {
      connectJob.schedule();
      connectJob.join();
      connectJob=null;
    }
    if (checkAndHandleDone()) {
      return;
    }
    code=responseCode;
    Trace.trace(Activator.PLUGIN_ID,"String_Node_Str" + code);
    if (code == HttpURLConnection.HTTP_PARTIAL || code == HttpURLConnection.HTTP_OK) {
      getResponseHeaderValues();
      setInputStream(getMethod.getResponseBodyAsUnzippedStream());
      fireReceiveStartEvent();
    }
 else     if (code == HttpURLConnection.HTTP_NOT_FOUND) {
      getMethod.releaseConnection();
      throw new FileNotFoundException(urlString);
    }
 else     if (code == HttpURLConnection.HTTP_UNAUTHORIZED) {
      getMethod.releaseConnection();
      throw new LoginException(Messages.HttpClientRetrieveFileTransfer_Unauthorized);
    }
 else     if (code == HttpURLConnection.HTTP_FORBIDDEN) {
      getMethod.releaseConnection();
      throw new LoginException("String_Node_Str");
    }
 else     if (code == HttpURLConnection.HTTP_PROXY_AUTH) {
      getMethod.releaseConnection();
      throw new LoginException(Messages.HttpClientRetrieveFileTransfer_Proxy_Auth_Required);
    }
 else {
      getMethod.releaseConnection();
      throw new IOException(NLS.bind(Messages.HttpClientRetrieveFileTransfer_ERROR_GENERAL_RESPONSE_CODE,new Integer(code)));
    }
  }
 catch (  final Exception e) {
    Trace.throwing(Activator.PLUGIN_ID,DebugOptions.EXCEPTIONS_THROWING,this.getClass(),"String_Node_Str",e);
    if (code == -1) {
      if (!isDone()) {
        setDoneException(e);
      }
      fireTransferReceiveDoneEvent();
    }
 else {
      IncomingFileTransferException ex=new IncomingFileTransferException(NLS.bind(Messages.HttpClientRetrieveFileTransfer_EXCEPTION_COULD_NOT_CONNECT,urlString),e,code);
      throw ex;
    }
  }
  Trace.exiting(Activator.PLUGIN_ID,DebugOptions.METHODS_EXITING,this.getClass(),"String_Node_Str");
}

Fixed version (ground truth):
protected void openStreams() throws IncomingFileTransferException {
  Trace.entering(Activator.PLUGIN_ID,DebugOptions.METHODS_ENTERING,this.getClass(),"String_Node_Str");
  final String urlString=getRemoteFileURL().toString();
  this.doneFired=false;
  int code=-1;
  try {
    httpClient.getHttpConnectionManager().getParams().setSoTimeout(DEFAULT_READ_TIMEOUT);
    httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(DEFAULT_CONNECTION_TIMEOUT);
    setupAuthentication(urlString);
    setupHostAndPort(urlString);
    getMethod=new GzipGetMethod(hostConfigHelper.getTargetRelativePath());
    getMethod.setFollowRedirects(true);
    getMethod.getParams().setParameter(CredentialsProvider.PROVIDER,new ECFCredentialsProvider());
    setRequestHeaderValues();
    Trace.trace(Activator.PLUGIN_ID,"String_Node_Str" + urlString);
    if (getFileRangeSpecification() == null) {
      Trace.trace(Activator.PLUGIN_ID,"String_Node_Str");
      getMethod.setRequestHeader(GzipGetMethod.ACCEPT_ENCODING,GzipGetMethod.CONTENT_ENCODING_ACCEPTED);
    }
 else {
      Trace.trace(Activator.PLUGIN_ID,"String_Node_Str");
    }
    fireConnectStartEvent();
    if (checkAndHandleDone()) {
      return;
    }
    connectingSockets.clear();
    if (connectJob == null) {
      performConnect(new NullProgressMonitor());
    }
 else {
      connectJob.schedule();
      connectJob.join();
      connectJob=null;
    }
    if (checkAndHandleDone()) {
      return;
    }
    code=responseCode;
    Trace.trace(Activator.PLUGIN_ID,"String_Node_Str" + code);
    if (code == HttpURLConnection.HTTP_PARTIAL || code == HttpURLConnection.HTTP_OK) {
      getResponseHeaderValues();
      setInputStream(getMethod.getResponseBodyAsUnzippedStream());
      fireReceiveStartEvent();
    }
 else     if (code == HttpURLConnection.HTTP_NOT_FOUND) {
      getMethod.releaseConnection();
      throw new FileNotFoundException(urlString);
    }
 else     if (code == HttpURLConnection.HTTP_UNAUTHORIZED) {
      getMethod.releaseConnection();
      throw new LoginException(Messages.HttpClientRetrieveFileTransfer_Unauthorized);
    }
 else     if (code == HttpURLConnection.HTTP_FORBIDDEN) {
      getMethod.releaseConnection();
      throw new LoginException("String_Node_Str");
    }
 else     if (code == HttpURLConnection.HTTP_PROXY_AUTH) {
      getMethod.releaseConnection();
      throw new LoginException(Messages.HttpClientRetrieveFileTransfer_Proxy_Auth_Required);
    }
 else {
      getMethod.releaseConnection();
      throw new IOException(NLS.bind(Messages.HttpClientRetrieveFileTransfer_ERROR_GENERAL_RESPONSE_CODE,new Integer(code)));
    }
  }
 catch (  final Exception e) {
    Trace.throwing(Activator.PLUGIN_ID,DebugOptions.EXCEPTIONS_THROWING,this.getClass(),"String_Node_Str",e);
    if (code == -1) {
      if (!isDone()) {
        setDoneException(e);
      }
      fireTransferReceiveDoneEvent();
    }
 else {
      IncomingFileTransferException ex=new IncomingFileTransferException(NLS.bind(Messages.HttpClientRetrieveFileTransfer_EXCEPTION_COULD_NOT_CONNECT,urlString),e,code);
      throw ex;
    }
  }
  Trace.exiting(Activator.PLUGIN_ID,DebugOptions.METHODS_EXITING,this.getClass(),"String_Node_Str");
}