Program: 130049
Project: 130049
Buggy source:
/** 
 * this creates or updates the org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY by adding or changing the command with value, except if value is null then the command shall be removed.
 * @param command the command to add or update or remove (if value is null) (usually starts with a -)
 * @param value the value of the command or null if the command is to removed.
 */
static public void updateOrCreateExitDataPropertyWithCommand(String command,String value){
  StringBuffer result=new StringBuffer(512);
  String currentProperty=System.getProperty(org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY);
  if (currentProperty != null) {
    Pattern commandPattern=Pattern.compile(command + "String_Node_Str");
    Matcher restartMatcher=commandPattern.matcher(currentProperty);
    if (value != null) {
      if (restartMatcher.find()) {
        currentProperty=restartMatcher.replaceAll(command + EclipseCommandLine.NEW_LINE + value+ EclipseCommandLine.NEW_LINE);
      }
 else {
        int indexOfVmArgs=currentProperty.indexOf(CMD_VMARGS);
        if (indexOfVmArgs >= 0) {
          currentProperty=currentProperty.substring(0,indexOfVmArgs) + command + EclipseCommandLine.NEW_LINE+ value+ EclipseCommandLine.NEW_LINE+ currentProperty.substring(indexOfVmArgs);
        }
 else {
          throw new IllegalArgumentException("String_Node_Str" + org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY + "String_Node_Str"+ EclipseCommandLine.CMD_VMARGS);
        }
      }
    }
 else {
      if (restartMatcher.find()) {
        currentProperty=restartMatcher.replaceAll("String_Node_Str");
      }
    }
    result.append(currentProperty);
  }
 else {
    String property=System.getProperty(EclipseCommandLine.PROP_VM);
    result.append(property);
    result.append(EclipseCommandLine.NEW_LINE);
    String vmargs=System.getProperty(EclipseCommandLine.PROP_VMARGS);
    if (vmargs != null) {
      result.append(vmargs);
    }
    property=System.getProperty(EclipseCommandLine.PROP_COMMANDS);
    if (property == null) {
      if (value != null) {
        result.append(command);
        result.append(EclipseCommandLine.NEW_LINE);
        result.append(value);
        result.append(EclipseCommandLine.NEW_LINE);
      }
    }
 else {
      Pattern commandPattern=Pattern.compile(command + "String_Node_Str");
      Matcher restartMatcher=commandPattern.matcher(property);
      if (value != null) {
        if (restartMatcher.find()) {
          property=restartMatcher.replaceAll(command + EclipseCommandLine.NEW_LINE + value+ EclipseCommandLine.NEW_LINE);
        }
 else {
          result.append(command);
          result.append(EclipseCommandLine.NEW_LINE);
          result.append(value);
          result.append(EclipseCommandLine.NEW_LINE);
        }
      }
 else {
        if (restartMatcher.find()) {
          property=restartMatcher.replaceAll(EclipseCommandLine.NEW_LINE);
        }
      }
      result.append(property);
    }
    if (vmargs != null) {
      result.append(EclipseCommandLine.CMD_VMARGS);
      result.append(EclipseCommandLine.NEW_LINE);
      result.append(vmargs);
    }
  }
  System.setProperty(org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY,result.toString());
}

Fixed version (ground truth):
/** 
 * this creates or updates the org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY by adding or changing the command with value, except if value is null then the command shall be removed.
 * @param command the command to add or update or remove (if value is null) (usually starts with a -)
 * @param value the value of the command,if the value is null,will only update the commmand
 * @param delete the flag used to trigger delete or insert/update the command
 */
static public void updateOrCreateExitDataPropertyWithCommand(String command,String value,boolean delete){
  boolean isValueNull=false;
  if (value == null || "String_Node_Str".equals(value)) {
    isValueNull=true;
  }
  StringBuffer result=new StringBuffer(512);
  String currentProperty=System.getProperty(org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY);
  if (currentProperty != null) {
    Pattern commandPattern=Pattern.compile(command + "String_Node_Str");
    Matcher restartMatcher=commandPattern.matcher(currentProperty);
    if (delete) {
      if (restartMatcher.find()) {
        currentProperty=restartMatcher.replaceAll("String_Node_Str");
      }
    }
 else {
      if (restartMatcher.find()) {
        currentProperty=restartMatcher.replaceAll(command + EclipseCommandLine.NEW_LINE + (isValueNull ? "String_Node_Str" : value + EclipseCommandLine.NEW_LINE));
      }
 else {
        int indexOfVmArgs=currentProperty.indexOf(CMD_VMARGS);
        if (indexOfVmArgs >= 0) {
          currentProperty=currentProperty.substring(0,indexOfVmArgs) + command + EclipseCommandLine.NEW_LINE+ (isValueNull ? "String_Node_Str" : value + EclipseCommandLine.NEW_LINE)+ currentProperty.substring(indexOfVmArgs);
        }
 else {
          throw new IllegalArgumentException("String_Node_Str" + org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY + "String_Node_Str"+ EclipseCommandLine.CMD_VMARGS);
        }
      }
    }
    result.append(currentProperty);
  }
 else {
    String property=System.getProperty(EclipseCommandLine.PROP_VM);
    result.append(property);
    result.append(EclipseCommandLine.NEW_LINE);
    String vmargs=System.getProperty(EclipseCommandLine.PROP_VMARGS);
    if (vmargs != null) {
      result.append(vmargs);
    }
    property=System.getProperty(EclipseCommandLine.PROP_COMMANDS);
    if (property == null) {
      if (value != null) {
        result.append(command);
        result.append(EclipseCommandLine.NEW_LINE);
        if (!isValueNull) {
          result.append(value);
          result.append(EclipseCommandLine.NEW_LINE);
        }
      }
    }
 else {
      Pattern commandPattern=Pattern.compile(command + "String_Node_Str");
      Matcher restartMatcher=commandPattern.matcher(property);
      if (delete) {
        if (restartMatcher.find()) {
          property=restartMatcher.replaceAll(EclipseCommandLine.NEW_LINE);
        }
      }
 else {
        if (restartMatcher.find()) {
          property=restartMatcher.replaceAll(command + EclipseCommandLine.NEW_LINE + (isValueNull ? "String_Node_Str" : value + EclipseCommandLine.NEW_LINE));
        }
 else {
          result.append(command);
          result.append(EclipseCommandLine.NEW_LINE);
          if (!isValueNull) {
            result.append(value);
            result.append(EclipseCommandLine.NEW_LINE);
          }
        }
      }
      result.append(property);
    }
    if (vmargs != null) {
      result.append(EclipseCommandLine.CMD_VMARGS);
      result.append(EclipseCommandLine.NEW_LINE);
      result.append(vmargs);
    }
  }
  System.setProperty(org.eclipse.equinox.app.IApplicationContext.EXIT_DATA_PROPERTY,result.toString());
}