Program: 24780
Project: 24780
Buggy source:
/** 
 * Main entry-point for the Text Indexer. <br><br> This function takes the command line arguments passed and uses them to create or update the specified indices with the specified source text. <br><br>
 * @param args    Command line arguments to process. The command line arguments required by the TextIndexer program are as follows: <blockquote dir=ltr style="MARGIN-RIGHT: 0px"><code> <b>TextIndexer -config</b> <font color=#0000ff><i>CfgFilePath</i></font>  { {<b>-clean</b>|<b>-incremental</b>}?  {<b>-trace errors</b>|<b>warnings</b>|<b>info</b>|<b>debug</b>}?  <b>-index</b> <font color=#0000ff><i>IndexName</i></font> }+ </b></code></blockquote> For a complete description of each command line argument, see the  {@link TextIndexer} class description.<br><br>
 */
public static void main(String[] args){
  try {
    IndexerConfig cfgInfo=new IndexerConfig();
    XMLConfigParser cfgParser=new XMLConfigParser();
    SrcTreeProcessor srcTreeProcessor=new SrcTreeProcessor();
    IdxTreeCleaner indexCleaner=new IdxTreeCleaner();
    int startArg=0;
    boolean showUsage=false;
    boolean firstIndex=true;
    long startTime=System.currentTimeMillis();
    Trace.info("String_Node_Str" + 1.7);
    Trace.info("String_Node_Str");
    Trace.tab();
    cfgInfo.xtfHomePath=System.getProperty("String_Node_Str");
    if (cfgInfo.xtfHomePath == null || cfgInfo.xtfHomePath.length() == 0) {
      Trace.error("String_Node_Str");
      System.exit(1);
    }
    cfgInfo.xtfHomePath=Path.normalizePath(cfgInfo.xtfHomePath);
    if (!new File(cfgInfo.xtfHomePath).isDirectory()) {
      Trace.error("String_Node_Str" + cfgInfo.xtfHomePath + "String_Node_Str");
      System.exit(1);
    }
    for (; ; ) {
      if (args.length < 2)       showUsage=true;
 else {
        int ret=cfgInfo.readCmdLine(args,startArg);
        if (ret == -1) {
          if (startArg == 0)           showUsage=true;
 else           break;
        }
 else {
          if (!(new File(cfgInfo.cfgFilePath).isAbsolute())) {
            cfgInfo.cfgFilePath=Path.resolveRelOrAbs(cfgInfo.xtfHomePath,cfgInfo.cfgFilePath);
          }
          if (cfgParser.configure(cfgInfo) < 0) {
            Trace.error("String_Node_Str" + cfgInfo.indexInfo.indexName + "String_Node_Str");
            System.exit(1);
          }
          cfgInfo.mustClean=cfgInfo.clean;
          Trace.setOutputLevel(cfgInfo.traceLevel);
        }
        startArg=ret;
      }
      if (showUsage) {
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.tab();
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.untab();
        System.exit(1);
      }
      File xtfHomeFile=new File(cfgInfo.xtfHomePath);
      if (firstIndex) {
        if (!cfgInfo.mustClean) {
          File idxRootDir=new File(Path.resolveRelOrAbs(xtfHomeFile,cfgInfo.indexInfo.indexPath));
          Trace.info("String_Node_Str");
          Trace.info("String_Node_Str");
          Trace.tab();
          indexCleaner.processDir(idxRootDir);
          Trace.untab();
          Trace.info("String_Node_Str");
        }
        Trace.info("String_Node_Str");
        Trace.info("String_Node_Str");
        Trace.tab();
        firstIndex=false;
      }
      Trace.info("String_Node_Str" + cfgInfo.indexInfo.indexName + "String_Node_Str");
      if (Trace.getOutputLevel() == Trace.debug)       Trace.more("String_Node_Str" + cfgInfo.indexInfo.getChunkSize() + "String_Node_Str"+ cfgInfo.indexInfo.getChunkOvlp()+ "String_Node_Str");
      Trace.tab();
      String srcRootDir=Path.resolveRelOrAbs(xtfHomeFile,cfgInfo.indexInfo.sourcePath);
      if (cfgInfo.indexInfo.subDir != null) {
        srcRootDir=Path.resolveRelOrAbs(srcRootDir,Path.normalizePath(cfgInfo.indexInfo.subDir));
      }
      srcTreeProcessor.open(cfgInfo);
      srcTreeProcessor.processDir(new File(srcRootDir),0);
      srcTreeProcessor.close();
      IdxTreeCuller culler=new IdxTreeCuller();
      Trace.info("String_Node_Str");
      Trace.tab();
      culler.cullIndex(new File(cfgInfo.xtfHomePath),cfgInfo.indexInfo);
      Trace.untab();
      Trace.info("String_Node_Str");
      Trace.untab();
      Trace.info("String_Node_Str");
    }
    Trace.untab();
    Trace.info("String_Node_Str");
    if (cfgInfo.optimize) {
      IdxTreeOptimizer optimizer=new IdxTreeOptimizer();
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
      Trace.tab();
      File idxRootDir=new File(cfgInfo.indexInfo.indexPath);
      optimizer.processDir(idxRootDir);
      Trace.untab();
      Trace.info("String_Node_Str");
    }
 else {
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
    }
    if (cfgInfo.updateSpellDict) {
      IdxTreeDictMaker dictMaker=new IdxTreeDictMaker();
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
      Trace.tab();
      File idxRootDir=new File(cfgInfo.indexInfo.indexPath);
      dictMaker.processDir(idxRootDir);
      Trace.untab();
      Trace.info("String_Node_Str");
    }
 else {
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
    }
    Trace.untab();
    Trace.info("String_Node_Str");
    long timeMsec=System.currentTimeMillis() - startTime;
    long timeSec=timeMsec / 1000;
    long timeMin=timeSec / 60;
    long timeHour=timeMin / 60;
    Trace.info("String_Node_Str");
    if (timeHour > 0) {
      String ending=(timeHour == 1) ? "String_Node_Str" : "String_Node_Str";
      Trace.more(Trace.info,timeHour + "String_Node_Str" + ending+ "String_Node_Str");
    }
    if (timeMin > 0) {
      String ending=((timeMin % 60) == 1) ? "String_Node_Str" : "String_Node_Str";
      Trace.more(Trace.info,(timeMin % 60) + "String_Node_Str" + ending+ "String_Node_Str");
    }
    String ending=((timeSec % 60) == 1) ? "String_Node_Str" : "String_Node_Str";
    Trace.more(Trace.info,(timeSec % 60) + "String_Node_Str" + ending+ "String_Node_Str");
    Trace.info("String_Node_Str");
    Trace.info("String_Node_Str");
  }
 catch (  Throwable t) {
    Trace.clearTabs();
    Trace.error("String_Node_Str" + t.getClass());
    Trace.error("String_Node_Str");
    t.printStackTrace(System.out);
    Trace.error("String_Node_Str");
    System.exit(1);
  }
  return;
}

Fixed version (ground truth):
/** 
 * Main entry-point for the Text Indexer. <br><br> This function takes the command line arguments passed and uses them to create or update the specified indices with the specified source text. <br><br>
 * @param args    Command line arguments to process. The command line arguments required by the TextIndexer program are as follows: <blockquote dir=ltr style="MARGIN-RIGHT: 0px"><code> <b>TextIndexer -config</b> <font color=#0000ff><i>CfgFilePath</i></font>  { {<b>-clean</b>|<b>-incremental</b>}?  {<b>-trace errors</b>|<b>warnings</b>|<b>info</b>|<b>debug</b>}?  <b>-index</b> <font color=#0000ff><i>IndexName</i></font> }+ </b></code></blockquote> For a complete description of each command line argument, see the  {@link TextIndexer} class description.<br><br>
 */
public static void main(String[] args){
  try {
    IndexerConfig cfgInfo=new IndexerConfig();
    XMLConfigParser cfgParser=new XMLConfigParser();
    SrcTreeProcessor srcTreeProcessor=new SrcTreeProcessor();
    IdxTreeCleaner indexCleaner=new IdxTreeCleaner();
    int startArg=0;
    boolean showUsage=false;
    boolean firstIndex=true;
    long startTime=System.currentTimeMillis();
    Trace.info("String_Node_Str" + 1.7);
    Trace.info("String_Node_Str");
    Trace.tab();
    cfgInfo.xtfHomePath=System.getProperty("String_Node_Str");
    if (cfgInfo.xtfHomePath == null || cfgInfo.xtfHomePath.length() == 0) {
      Trace.error("String_Node_Str");
      System.exit(1);
    }
    cfgInfo.xtfHomePath=Path.normalizePath(cfgInfo.xtfHomePath);
    if (!new File(cfgInfo.xtfHomePath).isDirectory()) {
      Trace.error("String_Node_Str" + cfgInfo.xtfHomePath + "String_Node_Str");
      System.exit(1);
    }
    for (; ; ) {
      if (args.length < 2)       showUsage=true;
 else {
        int ret=cfgInfo.readCmdLine(args,startArg);
        if (ret == -1) {
          if (startArg == 0)           showUsage=true;
 else           break;
        }
 else {
          if (!(new File(cfgInfo.cfgFilePath).isAbsolute())) {
            cfgInfo.cfgFilePath=Path.resolveRelOrAbs(cfgInfo.xtfHomePath,cfgInfo.cfgFilePath);
          }
          if (cfgParser.configure(cfgInfo) < 0) {
            Trace.error("String_Node_Str" + cfgInfo.indexInfo.indexName + "String_Node_Str");
            System.exit(1);
          }
          cfgInfo.mustClean=cfgInfo.clean;
          Trace.setOutputLevel(cfgInfo.traceLevel);
        }
        startArg=ret;
      }
      if (showUsage) {
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.tab();
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.error("String_Node_Str");
        Trace.untab();
        System.exit(1);
      }
      File xtfHomeFile=new File(cfgInfo.xtfHomePath);
      if (firstIndex) {
        if (!cfgInfo.mustClean) {
          File idxRootDir=new File(Path.resolveRelOrAbs(xtfHomeFile,cfgInfo.indexInfo.indexPath));
          Trace.info("String_Node_Str");
          Trace.info("String_Node_Str");
          Trace.tab();
          indexCleaner.processDir(idxRootDir);
          Trace.untab();
          Trace.info("String_Node_Str");
        }
        Trace.info("String_Node_Str");
        Trace.info("String_Node_Str");
        Trace.tab();
        firstIndex=false;
      }
      Trace.info("String_Node_Str" + cfgInfo.indexInfo.indexName + "String_Node_Str");
      if (Trace.getOutputLevel() == Trace.debug)       Trace.more("String_Node_Str" + cfgInfo.indexInfo.getChunkSize() + "String_Node_Str"+ cfgInfo.indexInfo.getChunkOvlp()+ "String_Node_Str");
      Trace.tab();
      String srcRootDir=Path.resolveRelOrAbs(xtfHomeFile,cfgInfo.indexInfo.sourcePath);
      if (cfgInfo.indexInfo.subDir != null) {
        srcRootDir=Path.resolveRelOrAbs(srcRootDir,Path.normalizePath(cfgInfo.indexInfo.subDir));
      }
      srcTreeProcessor.open(cfgInfo);
      srcTreeProcessor.processDir(new File(srcRootDir),0);
      srcTreeProcessor.close();
      IdxTreeCuller culler=new IdxTreeCuller();
      Trace.info("String_Node_Str");
      Trace.tab();
      culler.cullIndex(new File(cfgInfo.xtfHomePath),cfgInfo.indexInfo);
      Trace.untab();
      Trace.info("String_Node_Str");
      Trace.untab();
      Trace.info("String_Node_Str");
    }
    Trace.untab();
    Trace.info("String_Node_Str");
    if (cfgInfo.optimize) {
      IdxTreeOptimizer optimizer=new IdxTreeOptimizer();
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
      Trace.tab();
      File idxRootDir=new File(Path.resolveRelOrAbs(cfgInfo.xtfHomePath,cfgInfo.indexInfo.indexPath));
      optimizer.processDir(idxRootDir);
      Trace.untab();
      Trace.info("String_Node_Str");
    }
 else {
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
    }
    if (cfgInfo.updateSpellDict) {
      IdxTreeDictMaker dictMaker=new IdxTreeDictMaker();
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
      Trace.tab();
      File idxRootDir=new File(Path.resolveRelOrAbs(cfgInfo.xtfHomePath,cfgInfo.indexInfo.indexPath));
      dictMaker.processDir(idxRootDir);
      Trace.untab();
      Trace.info("String_Node_Str");
    }
 else {
      Trace.info("String_Node_Str");
      Trace.info("String_Node_Str");
    }
    Trace.untab();
    Trace.info("String_Node_Str");
    long timeMsec=System.currentTimeMillis() - startTime;
    long timeSec=timeMsec / 1000;
    long timeMin=timeSec / 60;
    long timeHour=timeMin / 60;
    Trace.info("String_Node_Str");
    if (timeHour > 0) {
      String ending=(timeHour == 1) ? "String_Node_Str" : "String_Node_Str";
      Trace.more(Trace.info,timeHour + "String_Node_Str" + ending+ "String_Node_Str");
    }
    if (timeMin > 0) {
      String ending=((timeMin % 60) == 1) ? "String_Node_Str" : "String_Node_Str";
      Trace.more(Trace.info,(timeMin % 60) + "String_Node_Str" + ending+ "String_Node_Str");
    }
    String ending=((timeSec % 60) == 1) ? "String_Node_Str" : "String_Node_Str";
    Trace.more(Trace.info,(timeSec % 60) + "String_Node_Str" + ending+ "String_Node_Str");
    Trace.info("String_Node_Str");
    Trace.info("String_Node_Str");
  }
 catch (  Throwable t) {
    Trace.clearTabs();
    Trace.error("String_Node_Str" + t.getClass());
    Trace.error("String_Node_Str");
    t.printStackTrace(System.out);
    Trace.error("String_Node_Str");
    System.exit(1);
  }
  return;
}