Program: 60325
Project: 60325
Buggy source:
private boolean isTrueExpr(String test,Chunk context){
  if (test == null)   return false;
  test=test.trim();
  if (test.length() == 0)   return false;
  char firstChar=test.charAt(0);
  if (firstChar == '!' || firstChar == '~' || firstChar == '$') {
    test=test.substring(1);
  }
  if (firstChar == '!' && (test.charAt(0) == '~' || test.charAt(0) == '$')) {
    test=test.substring(1);
  }
  if (test.indexOf('=') < 0 && test.indexOf("String_Node_Str") < 0) {
    Object tagValue=context.get(test);
    if (firstChar == '~' || firstChar == '$') {
      return (tagValue != null) ? true : false;
    }
 else     if (firstChar == '!') {
      return (tagValue == null) ? true : false;
    }
 else {
      return (test.equalsIgnoreCase("String_Node_Str")) ? true : false;
    }
  }
  boolean isNeg=false;
  if (test.indexOf("String_Node_Str") > 0 || (isNeg=test.indexOf("String_Node_Str") > 0)) {
    String[] parts=test.split("String_Node_Str");
    if (parts.length == 2) {
      String tagA=parts[0].trim();
      String tagB=parts[1].trim();
      Object tagValue=context.get(tagA);
      String tagValueA=tagValue == null ? "String_Node_Str" : tagValue.toString();
      if (tagB.charAt(0) == '~' || tagB.charAt(0) == '$') {
        tagValue=context.get(tagB.substring(1));
        String tagValueB=tagValue == null ? "String_Node_Str" : tagValue.toString();
        if (isNeg) {
          return (tagValueA.equals(tagValueB)) ? false : true;
        }
 else {
          return (tagValueA.equals(tagValueB)) ? true : false;
        }
      }
 else {
        String match=tagB;
        if (tagB.charAt(0) == '"' && tagB.charAt(match.length() - 1) == '"') {
          match=tagB.substring(1,tagB.length() - 1);
        }
        if (isNeg) {
          return (tagValueA.equals(match)) ? false : true;
        }
 else {
          return (tagValueA.equals(match)) ? true : false;
        }
      }
    }
  }
  String[] parts=test.split("String_Node_Str");
  boolean neg=false;
  if (parts.length != 2) {
    parts=test.split("String_Node_Str");
    neg=true;
    if (parts.length != 2) {
      return false;
    }
  }
  String var=parts[0].trim();
  String regex=parts[1].trim();
  Object tagValue=context.get(var);
  boolean isMatch=isMatch(tagValue == null ? null : tagValue.toString(),regex);
  if (neg) {
    return isMatch ? false : true;
  }
 else {
    return isMatch ? true : false;
  }
}

Fixed version (ground truth):
private boolean isTrueExpr(String test,Chunk context){
  if (test == null)   return false;
  test=test.trim();
  if (test.length() == 0)   return false;
  char firstChar=test.charAt(0);
  if (firstChar == '!' || firstChar == '~' || firstChar == '$') {
    test=test.substring(1);
  }
  if (firstChar == '!' && (test.charAt(0) == '~' || test.charAt(0) == '$')) {
    test=test.substring(1);
  }
  if (test.indexOf('=') < 0 && test.indexOf("String_Node_Str") < 0) {
    Object tagValue=context.get(test);
    if (firstChar == '~' || firstChar == '$') {
      return (tagValue != null) ? true : false;
    }
 else     if (firstChar == '!') {
      return (tagValue == null) ? true : false;
    }
 else {
      return (test.equalsIgnoreCase("String_Node_Str")) ? true : false;
    }
  }
  boolean isNeg=false;
  if (test.indexOf("String_Node_Str") > 0 || (isNeg=test.indexOf("String_Node_Str") > 0)) {
    String[] parts=test.split("String_Node_Str");
    if (parts.length == 2) {
      String tagA=parts[0].trim();
      String tagB=parts[1].trim();
      Object tagValue=context.get(tagA);
      String tagValueA=tagValue == null ? "String_Node_Str" : tagValue.toString();
      if (tagB.charAt(0) == '~' || tagB.charAt(0) == '$') {
        tagValue=context.get(tagB.substring(1));
        String tagValueB=tagValue == null ? "String_Node_Str" : tagValue.toString();
        if (isNeg) {
          return (tagValueA.equals(tagValueB)) ? false : true;
        }
 else {
          return (tagValueA.equals(tagValueB)) ? true : false;
        }
      }
 else {
        String match=tagB;
        if (tagB.charAt(0) == '"' && tagB.charAt(match.length() - 1) == '"') {
          match=tagB.substring(1,tagB.length() - 1);
          match=unescape(match);
        }
 else         if (tagB.charAt(0) == '\'' && tagB.charAt(match.length() - 1) == '\'') {
          match=tagB.substring(1,tagB.length() - 1);
          match=unescape(match);
        }
        if (isNeg) {
          return (tagValueA.equals(match)) ? false : true;
        }
 else {
          return (tagValueA.equals(match)) ? true : false;
        }
      }
    }
  }
  String[] parts=test.split("String_Node_Str");
  boolean neg=false;
  if (parts.length != 2) {
    parts=test.split("String_Node_Str");
    neg=true;
    if (parts.length != 2) {
      return false;
    }
  }
  String var=parts[0].trim();
  String regex=parts[1].trim();
  Object tagValue=context.get(var);
  boolean isMatch=isMatch(tagValue == null ? null : tagValue.toString(),regex);
  if (neg) {
    return isMatch ? false : true;
  }
 else {
    return isMatch ? true : false;
  }
}