Program: 152352
Project: 152352
Buggy source:
/** 
 * Parse argument.
 */
private boolean parse(String argument){
  String lsFileName="String_Node_Str";
  String options="String_Node_Str";
  String pattern="String_Node_Str";
  if (argument != null) {
    argument=argument.trim();
    StringBuffer optionsSb=new StringBuffer(4);
    StringTokenizer st=new StringTokenizer(argument,"String_Node_Str");
    while (st.hasMoreTokens()) {
      String token=st.nextToken();
      if (token.charAt(0) == '-') {
        if (token.length() > 1) {
          optionsSb.append(token.substring(1));
        }
      }
 else {
        lsFileName=token;
      }
    }
    options=optionsSb.toString();
  }
  m_isAllOption=options.indexOf('a') != -1;
  m_isDetailOption=options.indexOf('l') != -1;
  if ((lsFileName.indexOf('*') == -1) && (lsFileName.indexOf('?') == -1) && (lsFileName.indexOf('[') == -1)) {
    m_pattern=null;
    m_file=lsFileName;
    return true;
  }
  try {
    int slashIndex=lsFileName.lastIndexOf('/');
    if (slashIndex == -1) {
      pattern=lsFileName;
      lsFileName="String_Node_Str";
    }
 else     if (slashIndex != (lsFileName.length() - 1)) {
      pattern=lsFileName.substring(slashIndex + 1);
      lsFileName=lsFileName.substring(0,slashIndex + 1);
    }
 else {
      return false;
    }
    FileObject file=m_fileSystemView.getFileObject(lsFileName);
    if (file == null) {
      return false;
    }
    if (!file.isDirectory()) {
      return false;
    }
  }
 catch (  FtpException ex) {
    ex.printStackTrace();
    return false;
  }
  m_file=lsFileName;
  if ("String_Node_Str".equals(pattern) || "String_Node_Str".equals(pattern)) {
    m_pattern=null;
  }
 else {
    m_pattern=pattern;
  }
  return true;
}

Fixed version (ground truth):
/** 
 * Parse argument.
 */
private boolean parse(String argument){
  String lsFileName="String_Node_Str";
  String options="String_Node_Str";
  String pattern="String_Node_Str";
  if (argument != null) {
    argument=argument.trim();
    StringBuffer optionsSb=new StringBuffer(4);
    StringBuffer lsFileNameSb=new StringBuffer(16);
    StringTokenizer st=new StringTokenizer(argument,"String_Node_Str",true);
    while (st.hasMoreTokens()) {
      String token=st.nextToken();
      if (lsFileNameSb.length() != 0) {
        lsFileNameSb.append(token);
      }
 else       if (token.equals("String_Node_Str")) {
        continue;
      }
 else       if (token.charAt(0) == '-') {
        if (token.length() > 1) {
          optionsSb.append(token.substring(1));
        }
      }
 else {
        lsFileNameSb.append(token);
      }
    }
    if (lsFileNameSb.length() != 0) {
      lsFileName=lsFileNameSb.toString();
    }
    options=optionsSb.toString();
  }
  m_isAllOption=options.indexOf('a') != -1;
  m_isDetailOption=options.indexOf('l') != -1;
  if ((lsFileName.indexOf('*') == -1) && (lsFileName.indexOf('?') == -1) && (lsFileName.indexOf('[') == -1)) {
    m_pattern=null;
    m_file=lsFileName;
    return true;
  }
  try {
    int slashIndex=lsFileName.lastIndexOf('/');
    if (slashIndex == -1) {
      pattern=lsFileName;
      lsFileName="String_Node_Str";
    }
 else     if (slashIndex != (lsFileName.length() - 1)) {
      pattern=lsFileName.substring(slashIndex + 1);
      lsFileName=lsFileName.substring(0,slashIndex + 1);
    }
 else {
      return false;
    }
    FileObject file=m_fileSystemView.getFileObject(lsFileName);
    if (file == null) {
      return false;
    }
    if (!file.isDirectory()) {
      return false;
    }
  }
 catch (  FtpException ex) {
    ex.printStackTrace();
    return false;
  }
  m_file=lsFileName;
  if ("String_Node_Str".equals(pattern) || "String_Node_Str".equals(pattern)) {
    m_pattern=null;
  }
 else {
    m_pattern=pattern;
  }
  return true;
}