Program: 92091
Project: 92091
Buggy source:
@Override public void launch(ILaunchConfiguration config,String mode,ILaunch launch,IProgressMonitor monitor) throws CoreException {
  if (!PerfCore.checkPerfInPath()) {
    IStatus status=new Status(IStatus.ERROR,PerfPlugin.PLUGIN_ID,"String_Node_Str");
    throw new CoreException(status);
  }
  IPath exePath=CDebugUtils.verifyProgramPath(config);
  String arguments[]=getProgramArgumentsArray(config);
  File wd=getWorkingDirectory(config);
  if (wd == null) {
    wd=new File(System.getProperty("String_Node_Str","String_Node_Str"));
  }
  IPath workingDir=Path.fromOSString(wd.toURI().getPath());
  PerfPlugin.getDefault().setWorkingDir(workingDir);
  if (config.getAttribute(PerfPlugin.ATTR_ShowStat,PerfPlugin.ATTR_ShowStat_default)) {
    int runCount=config.getAttribute(PerfPlugin.ATTR_StatRunCount,PerfPlugin.ATTR_StatRunCount_default);
    StringBuffer args=new StringBuffer();
    for (    String arg : arguments) {
      args.append(arg);
      args.append("String_Node_Str");
    }
    String title=renderProcessLabel("String_Node_Str" + exePath.toOSString() + "String_Node_Str"+ args.toString()+ "String_Node_Str"+ runCount+ "String_Node_Str");
    StatData sd=null;
    Object[] configEvents=config.getAttribute(PerfPlugin.ATTR_SelectedEvents,PerfPlugin.ATTR_SelectedEvents_default).toArray();
    String[] statEvents=new String[0];
    if (!config.getAttribute(PerfPlugin.ATTR_DefaultEvent,PerfPlugin.ATTR_DefaultEvent_default)) {
      statEvents=configEvents == null ? statEvents : Arrays.asList(configEvents).toArray(new String[]{});
    }
    sd=new StatData(title,exePath.toOSString(),arguments,runCount,statEvents);
    sd.parse();
    PerfPlugin.getDefault().setStatData(sd);
    StatView.refreshView();
  }
 else {
    ArrayList<String> command=new ArrayList<String>();
    command.addAll(Arrays.asList(PerfCore.getRecordString(config)));
    command.add(exePath.toOSString());
    command.addAll(Arrays.asList(arguments));
    String[] commandArray=command.toArray(new String[]{});
    boolean usePty=config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_USE_TERMINAL,ICDTLaunchConfigurationConstants.USE_TERMINAL_DEFAULT);
    Process process;
    try {
      process=execute(commandArray,getEnvironment(config),wd,usePty);
      createNewProcess(launch,process,commandArray[0]);
      process.waitFor();
      PrintStream print=null;
      if (config.getAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE,true)) {
        ConsolePlugin plugin=ConsolePlugin.getDefault();
        IConsoleManager conMan=plugin.getConsoleManager();
        IConsole[] existing=conMan.getConsoles();
        IOConsole binaryOutCons=null;
        for (        IConsole x : existing) {
          if (x.getName().contains(renderProcessLabel(commandArray[0]))) {
            binaryOutCons=(IOConsole)x;
          }
        }
        if ((binaryOutCons == null) && (existing.length != 0)) {
          if (existing[existing.length - 1] instanceof IOConsole)           binaryOutCons=(IOConsole)existing[existing.length - 1];
        }
        OutputStream outputTo;
        if (binaryOutCons != null) {
          outputTo=binaryOutCons.newOutputStream();
          print=new PrintStream(outputTo);
          for (int i=0; i < commandArray.length; i++) {
            print.print(commandArray[i] + "String_Node_Str");
          }
          print.println();
          print.println("String_Node_Str");
        }
      }
      PerfCore.Report(config,getEnvironment(config),workingDir,monitor,null,print);
      PerfCore.RefreshView(renderProcessLabel(exePath.toOSString()));
      if (config.getAttribute(PerfPlugin.ATTR_ShowSourceDisassembly,PerfPlugin.ATTR_ShowSourceDisassembly_default)) {
        String title=renderProcessLabel(workingDir + "String_Node_Str");
        SourceDisassemblyData sdData=new SourceDisassemblyData(title,workingDir);
        sdData.parse();
        PerfPlugin.getDefault().setSourceDisassemblyData(sdData);
        SourceDisassemblyView.refreshView();
      }
    }
 catch (    InterruptedException e) {
      e.printStackTrace();
    }
  }
}

Fixed version (ground truth):
@Override public void launch(ILaunchConfiguration config,String mode,ILaunch launch,IProgressMonitor monitor) throws CoreException {
  if (!PerfCore.checkPerfInPath()) {
    IStatus status=new Status(IStatus.ERROR,PerfPlugin.PLUGIN_ID,"String_Node_Str");
    throw new CoreException(status);
  }
  IPath exePath=CDebugUtils.verifyProgramPath(config);
  String arguments[]=getProgramArgumentsArray(config);
  File wd=getWorkingDirectory(config);
  if (wd == null) {
    wd=new File(System.getProperty("String_Node_Str","String_Node_Str"));
  }
  IPath workingDir=Path.fromOSString(wd.toURI().getPath());
  PerfPlugin.getDefault().setWorkingDir(workingDir);
  if (config.getAttribute(PerfPlugin.ATTR_ShowStat,PerfPlugin.ATTR_ShowStat_default)) {
    int runCount=config.getAttribute(PerfPlugin.ATTR_StatRunCount,PerfPlugin.ATTR_StatRunCount_default);
    StringBuffer args=new StringBuffer();
    for (    String arg : arguments) {
      args.append(arg);
      args.append("String_Node_Str");
    }
    String title=renderProcessLabel("String_Node_Str" + exePath.toOSString() + "String_Node_Str"+ args.toString()+ "String_Node_Str"+ runCount+ "String_Node_Str");
    StatData sd=null;
    List<String> configEvents=config.getAttribute(PerfPlugin.ATTR_SelectedEvents,PerfPlugin.ATTR_SelectedEvents_default);
    String[] statEvents=new String[]{};
    if (!config.getAttribute(PerfPlugin.ATTR_DefaultEvent,PerfPlugin.ATTR_DefaultEvent_default)) {
      statEvents=(configEvents == null) ? statEvents : configEvents.toArray(new String[]{});
    }
    sd=new StatData(title,exePath.toOSString(),arguments,runCount,statEvents);
    sd.parse();
    PerfPlugin.getDefault().setStatData(sd);
    StatView.refreshView();
  }
 else {
    ArrayList<String> command=new ArrayList<String>();
    command.addAll(Arrays.asList(PerfCore.getRecordString(config)));
    command.add(exePath.toOSString());
    command.addAll(Arrays.asList(arguments));
    String[] commandArray=command.toArray(new String[]{});
    boolean usePty=config.getAttribute(ICDTLaunchConfigurationConstants.ATTR_USE_TERMINAL,ICDTLaunchConfigurationConstants.USE_TERMINAL_DEFAULT);
    Process process;
    try {
      process=execute(commandArray,getEnvironment(config),wd,usePty);
      createNewProcess(launch,process,commandArray[0]);
      process.waitFor();
      PrintStream print=null;
      if (config.getAttribute(IDebugUIConstants.ATTR_CAPTURE_IN_CONSOLE,true)) {
        ConsolePlugin plugin=ConsolePlugin.getDefault();
        IConsoleManager conMan=plugin.getConsoleManager();
        IConsole[] existing=conMan.getConsoles();
        IOConsole binaryOutCons=null;
        for (        IConsole x : existing) {
          if (x.getName().contains(renderProcessLabel(commandArray[0]))) {
            binaryOutCons=(IOConsole)x;
          }
        }
        if ((binaryOutCons == null) && (existing.length != 0)) {
          if (existing[existing.length - 1] instanceof IOConsole)           binaryOutCons=(IOConsole)existing[existing.length - 1];
        }
        OutputStream outputTo;
        if (binaryOutCons != null) {
          outputTo=binaryOutCons.newOutputStream();
          print=new PrintStream(outputTo);
          for (int i=0; i < commandArray.length; i++) {
            print.print(commandArray[i] + "String_Node_Str");
          }
          print.println();
          print.println("String_Node_Str");
        }
      }
      PerfCore.Report(config,getEnvironment(config),workingDir,monitor,null,print);
      PerfCore.RefreshView(renderProcessLabel(exePath.toOSString()));
      if (config.getAttribute(PerfPlugin.ATTR_ShowSourceDisassembly,PerfPlugin.ATTR_ShowSourceDisassembly_default)) {
        String title=renderProcessLabel(workingDir + "String_Node_Str");
        SourceDisassemblyData sdData=new SourceDisassemblyData(title,workingDir);
        sdData.parse();
        PerfPlugin.getDefault().setSourceDisassemblyData(sdData);
        SourceDisassemblyView.refreshView();
      }
    }
 catch (    InterruptedException e) {
      e.printStackTrace();
    }
  }
}