Program: 40885
Project: 40885
Buggy source:
/** 
 * @param typeSigs TypeSignature
 * @return tokenize it
 */
static String[] parseForTypeArguments(String typeArgs){
  ArrayList<String> args=new ArrayList<String>(10);
  int i=1;
  while (true) {
switch (typeArgs.charAt(i++)) {
case TypeReference.ClassTypeCode:
{
        int off=i - 1;
        int depth=0;
        while (typeArgs.charAt(i++) != ';' || depth > 0) {
          if (typeArgs.charAt(i - 1) == '<') {
            depth++;
          }
          if (typeArgs.charAt(i - 1) == '>') {
            depth--;
          }
        }
        args.add(typeArgs.substring(off,i));
        continue;
      }
case TypeReference.ArrayTypeCode:
{
      int off=i - 1;
      while (typeArgs.charAt(i) == TypeReference.ArrayTypeCode) {
        ++i;
      }
      if (typeArgs.charAt(i++) == TypeReference.ClassTypeCode) {
        while (typeArgs.charAt(i++) != ';')         ;
        args.add(typeArgs.substring(off,i - off - 1));
      }
 else {
        args.add(typeArgs.substring(off,i - off));
      }
      continue;
    }
case (byte)'+':
case (byte)'T':
{
    int off=i - 1;
    while (typeArgs.charAt(i++) != ';')     ;
    args.add(typeArgs.substring(off,i));
    continue;
  }
case (byte)'*':
{
  args.add("String_Node_Str");
  continue;
}
case (byte)'>':
int size=args.size();
if (size == 0) {
return null;
}
Iterator<String> it=args.iterator();
String[] result=new String[size];
for (int j=0; j < size; j++) {
result[j]=it.next();
}
return result;
default :
if (Assertions.verifyAssertions) {
Assertions._assert(false,"String_Node_Str" + typeArgs);
}
}
}
}

Fixed version (ground truth):
/** 
 * @param typeSigs TypeSignature
 * @return tokenize it
 */
static String[] parseForTypeArguments(String typeArgs){
  ArrayList<String> args=new ArrayList<String>(10);
  int i=1;
  while (true) {
switch (typeArgs.charAt(i++)) {
case TypeReference.ClassTypeCode:
{
        int off=i - 1;
        int depth=0;
        while (typeArgs.charAt(i++) != ';' || depth > 0) {
          if (typeArgs.charAt(i - 1) == '<') {
            depth++;
          }
          if (typeArgs.charAt(i - 1) == '>') {
            depth--;
          }
        }
        args.add(typeArgs.substring(off,i));
        continue;
      }
case TypeReference.ArrayTypeCode:
{
      int off=i - 1;
      while (typeArgs.charAt(i) == TypeReference.ArrayTypeCode) {
        ++i;
      }
      if (typeArgs.charAt(i++) == TypeReference.ClassTypeCode) {
        while (typeArgs.charAt(i++) != ';')         ;
        args.add(typeArgs.substring(off,i - off - 1));
      }
 else {
        args.add(typeArgs.substring(off,i - off));
      }
      continue;
    }
case (byte)'-':
case (byte)'+':
case (byte)'T':
{
    int off=i - 1;
    while (typeArgs.charAt(i++) != ';')     ;
    args.add(typeArgs.substring(off,i));
    continue;
  }
case (byte)'*':
{
  args.add("String_Node_Str");
  continue;
}
case (byte)'>':
int size=args.size();
if (size == 0) {
return null;
}
Iterator<String> it=args.iterator();
String[] result=new String[size];
for (int j=0; j < size; j++) {
result[j]=it.next();
}
return result;
default :
if (Assertions.verifyAssertions) {
Assertions._assert(false,"String_Node_Str" + typeArgs);
}
}
}
}