Program: 40845
Project: 40845
Buggy source:
/** 
 * @param typeSigs Strin TypeSignature
 * @return tokenize it
 */
static String[] parseForTypeSignatures(String typeSigs){
  ArrayList<String> sigs=new ArrayList<String>(10);
  int i=1;
  while (true) {
switch (typeSigs.charAt(i++)) {
case TypeReference.VoidTypeCode:
      sigs.add(TypeReference.VoidName.toString());
    continue;
case TypeReference.BooleanTypeCode:
  sigs.add(TypeReference.BooleanName.toString());
continue;
case TypeReference.ByteTypeCode:
sigs.add(TypeReference.ByteName.toString());
continue;
case TypeReference.ShortTypeCode:
sigs.add(TypeReference.ShortName.toString());
continue;
case TypeReference.IntTypeCode:
sigs.add(TypeReference.IntName.toString());
continue;
case TypeReference.LongTypeCode:
sigs.add(TypeReference.LongName.toString());
continue;
case TypeReference.FloatTypeCode:
sigs.add(TypeReference.FloatName.toString());
continue;
case TypeReference.DoubleTypeCode:
sigs.add(TypeReference.DoubleName.toString());
continue;
case TypeReference.CharTypeCode:
sigs.add(TypeReference.CharName.toString());
continue;
case TypeReference.ClassTypeCode:
{
int off=i - 1;
int depth=0;
while (typeSigs.charAt(i++) != ';' || depth > 0) {
if (typeSigs.charAt(i - 1) == '<') {
depth++;
}
if (typeSigs.charAt(i - 1) == '>') {
depth--;
}
}
sigs.add(typeSigs.substring(off,i));
continue;
}
case TypeReference.ArrayTypeCode:
{
switch (typeSigs.charAt(i)) {
case TypeReference.BooleanTypeCode:
case TypeReference.ByteTypeCode:
case TypeReference.IntTypeCode:
sigs.add(typeSigs.substring(i - 1,i + 1));
break;
case 'T':
case TypeReference.ClassTypeCode:
int off=i - 1;
i++;
int depth=0;
while (typeSigs.charAt(i++) != ';' || depth > 0) {
if (typeSigs.charAt(i - 1) == '<') {
depth++;
}
if (typeSigs.charAt(i - 1) == '>') {
depth--;
}
}
sigs.add(typeSigs.substring(off,i));
break;
default :
Assertions.UNREACHABLE("String_Node_Str" + typeSigs.charAt(i));
}
continue;
}
case (byte)'T':
{
int off=i - 1;
while (typeSigs.charAt(i++) != ';') ;
sigs.add(typeSigs.substring(off,i));
continue;
}
case (byte)')':
int size=sigs.size();
if (size == 0) {
return null;
}
Iterator<String> it=sigs.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" + typeSigs);
}
}
}
}

Fixed version (ground truth):
/** 
 * @param typeSigs TypeSignature
 * @return tokenize it
 */
static String[] parseForTypeSignatures(String typeSigs) throws IllegalArgumentException {
  ArrayList<String> sigs=new ArrayList<String>(10);
  if (typeSigs.length() < 2) {
    throw new IllegalArgumentException("String_Node_Str" + typeSigs);
  }
  int i=1;
  while (true) {
switch (typeSigs.charAt(i++)) {
case TypeReference.VoidTypeCode:
      sigs.add(TypeReference.VoidName.toString());
    continue;
case TypeReference.BooleanTypeCode:
  sigs.add(TypeReference.BooleanName.toString());
continue;
case TypeReference.ByteTypeCode:
sigs.add(TypeReference.ByteName.toString());
continue;
case TypeReference.ShortTypeCode:
sigs.add(TypeReference.ShortName.toString());
continue;
case TypeReference.IntTypeCode:
sigs.add(TypeReference.IntName.toString());
continue;
case TypeReference.LongTypeCode:
sigs.add(TypeReference.LongName.toString());
continue;
case TypeReference.FloatTypeCode:
sigs.add(TypeReference.FloatName.toString());
continue;
case TypeReference.DoubleTypeCode:
sigs.add(TypeReference.DoubleName.toString());
continue;
case TypeReference.CharTypeCode:
sigs.add(TypeReference.CharName.toString());
continue;
case TypeReference.ClassTypeCode:
{
int off=i - 1;
int depth=0;
while (typeSigs.charAt(i++) != ';' || depth > 0) {
if (typeSigs.charAt(i - 1) == '<') {
depth++;
}
if (typeSigs.charAt(i - 1) == '>') {
depth--;
}
}
sigs.add(typeSigs.substring(off,i));
continue;
}
case TypeReference.ArrayTypeCode:
{
switch (typeSigs.charAt(i)) {
case TypeReference.BooleanTypeCode:
case TypeReference.ByteTypeCode:
case TypeReference.IntTypeCode:
sigs.add(typeSigs.substring(i - 1,i + 1));
break;
case 'T':
case TypeReference.ClassTypeCode:
int off=i - 1;
i++;
int depth=0;
while (typeSigs.charAt(i++) != ';' || depth > 0) {
if (typeSigs.charAt(i - 1) == '<') {
depth++;
}
if (typeSigs.charAt(i - 1) == '>') {
depth--;
}
}
sigs.add(typeSigs.substring(off,i));
break;
default :
Assertions.UNREACHABLE("String_Node_Str" + typeSigs.charAt(i));
}
continue;
}
case (byte)'T':
{
int off=i - 1;
while (typeSigs.charAt(i++) != ';') ;
sigs.add(typeSigs.substring(off,i));
continue;
}
case (byte)')':
int size=sigs.size();
if (size == 0) {
return null;
}
Iterator<String> it=sigs.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" + typeSigs);
}
}
}
}