Program: 42285
Project: 42285
Buggy source:
private List<XValue> expandWild(XValue v){
  ArrayList<XValue> r=new ArrayList<XValue>();
  if (v.isXExpr()) {
    r.add(v);
    return r;
  }
  String vs=v.toString();
  int vslen=vs.length();
  StringBuffer sb=new StringBuffer();
  char cQuote=0;
  boolean wildUnQuoted=false;
  for (int i=0; i < vslen; i++) {
    char c=vs.charAt(i);
    if (c == '\\' && i < vslen - 1) {
      c=vs.charAt(++i);
      if (c != '"' && c != '\'')       sb.append('\\');
      sb.append(c);
      continue;
    }
    if (c == '"' || c == '\'') {
      if (c == cQuote) {
        cQuote=0;
        continue;
      }
 else       if (cQuote == 0) {
        cQuote=c;
        continue;
      }
    }
    if (cQuote == 0 && (c == '*' || c == '?' || c == '['))     wildUnQuoted=true;
    sb.append(c);
  }
  if (!wildUnQuoted) {
    String sbs=sb.toString();
    if (sbs.equals(vs))     r.add(v);
 else     r.add(new XValue(sbs));
    return r;
  }
  vs=sb.toString();
  List<String> rs=new ArrayList<String>();
  vs=vs.replaceAll("String_Node_Str","String_Node_Str");
  String root=null;
  String parent=null;
  if (vs.startsWith("String_Node_Str")) {
    root="String_Node_Str";
    parent="String_Node_Str";
    vs=vs.substring(1);
  }
  if (Util.isWindows() && vs.matches("String_Node_Str")) {
    root=vs.substring(0,2) + "String_Node_Str";
    vs=vs.substring(2);
    if (vs.startsWith("String_Node_Str"))     vs=vs.substring(1);
    parent=root;
  }
  String wilds[]=vs.split("String_Node_Str");
  expandDir(root == null ? mShell.getCurdir() : new File(root),parent,wilds,rs);
  for (  String f : rs) {
    r.add(new XValue(f));
  }
  if (r.size() == 0)   r.add(v);
  return r;
}

Fixed version (ground truth):
private List<XValue> expandWild(XValue v){
  ArrayList<XValue> r=new ArrayList<XValue>();
  if (v.isXExpr() || v.isObject()) {
    r.add(v);
    return r;
  }
  String vs=v.toString();
  int vslen=vs.length();
  StringBuffer sb=new StringBuffer();
  char cQuote=0;
  boolean wildUnQuoted=false;
  for (int i=0; i < vslen; i++) {
    char c=vs.charAt(i);
    if (c == '\\' && i < vslen - 1) {
      c=vs.charAt(++i);
      if (c != '"' && c != '\'')       sb.append('\\');
      sb.append(c);
      continue;
    }
    if (c == '"' || c == '\'') {
      if (c == cQuote) {
        cQuote=0;
        continue;
      }
 else       if (cQuote == 0) {
        cQuote=c;
        continue;
      }
    }
    if (cQuote == 0 && (c == '*' || c == '?' || c == '['))     wildUnQuoted=true;
    sb.append(c);
  }
  if (!wildUnQuoted) {
    String sbs=sb.toString();
    if (sbs.equals(vs))     r.add(v);
 else     r.add(new XValue(sbs));
    return r;
  }
  vs=sb.toString();
  List<String> rs=new ArrayList<String>();
  vs=vs.replaceAll("String_Node_Str","String_Node_Str");
  String root=null;
  String parent=null;
  if (vs.startsWith("String_Node_Str")) {
    root="String_Node_Str";
    parent="String_Node_Str";
    vs=vs.substring(1);
  }
  if (Util.isWindows() && vs.matches("String_Node_Str")) {
    root=vs.substring(0,2) + "String_Node_Str";
    vs=vs.substring(2);
    if (vs.startsWith("String_Node_Str"))     vs=vs.substring(1);
    parent=root;
  }
  String wilds[]=vs.split("String_Node_Str");
  expandDir(root == null ? mShell.getCurdir() : new File(root),parent,wilds,rs);
  for (  String f : rs) {
    r.add(new XValue(f));
  }
  if (r.size() == 0)   r.add(v);
  return r;
}