Program: 61735
Project: 61735
Buggy source:
private static int parseMultiName(ConstantPool constants,Flasm3Lexer lexer) throws ParseException, IOException {
  ParsedSymbol s=lexer.lex();
  int kind=0;
  int name_index=-1;
  int namespace_index=-1;
  int namespace_set_index=-1;
  int qname_index=-1;
  List<Integer> params=new ArrayList<>();
switch (s.type) {
case ParsedSymbol.TYPE_KEYWORD_NULL:
    return 0;
case ParsedSymbol.TYPE_KEYWORD_QNAME:
  kind=Multiname.QNAME;
break;
case ParsedSymbol.TYPE_KEYWORD_QNAMEA:
kind=Multiname.QNAMEA;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAME:
kind=Multiname.RTQNAME;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEA:
kind=Multiname.RTQNAMEA;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEL:
kind=Multiname.RTQNAMEL;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMELA:
kind=Multiname.RTQNAMELA;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAME:
kind=Multiname.MULTINAME;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEA:
kind=Multiname.MULTINAMEA;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEL:
kind=Multiname.MULTINAMEL;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMELA:
kind=Multiname.MULTINAMELA;
break;
case ParsedSymbol.TYPE_KEYWORD_TYPENAME:
kind=Multiname.TYPENAME;
break;
default :
throw new ParseException("String_Node_Str",lexer.yyline());
}
switch (s.type) {
case ParsedSymbol.TYPE_KEYWORD_QNAME:
case ParsedSymbol.TYPE_KEYWORD_QNAMEA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
namespace_index=parseNamespace(constants,lexer);
expected(ParsedSymbol.TYPE_COMMA,"String_Node_Str",lexer);
ParsedSymbol name=lexer.lex();
expected(name,ParsedSymbol.TYPE_STRING,"String_Node_Str");
name_index=constants.getStringId((String)name.value,true);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAME:
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
ParsedSymbol rtqName=lexer.lex();
expected(rtqName,ParsedSymbol.TYPE_STRING,"String_Node_Str");
name_index=constants.getStringId((String)rtqName.value,true);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEL:
case ParsedSymbol.TYPE_KEYWORD_RTQNAMELA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAME:
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
ParsedSymbol mName=lexer.lex();
expected(mName,ParsedSymbol.TYPE_STRING,"String_Node_Str");
name_index=constants.getStringId((String)mName.value,true);
expected(ParsedSymbol.TYPE_COMMA,"String_Node_Str",lexer);
namespace_set_index=parseNamespaceSet(constants,lexer);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEL:
case ParsedSymbol.TYPE_KEYWORD_MULTINAMELA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
namespace_set_index=parseNamespaceSet(constants,lexer);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_TYPENAME:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
qname_index=parseMultiName(constants,lexer);
expected(ParsedSymbol.TYPE_LOWERTHAN,"String_Node_Str",lexer);
params.add(parseMultiName(constants,lexer));
ParsedSymbol nt=lexer.lex();
while (nt.type == ParsedSymbol.TYPE_COMMA) {
params.add(parseMultiName(constants,lexer));
nt=lexer.lex();
}
expected(nt,ParsedSymbol.TYPE_GREATERTHAN,"String_Node_Str");
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
}
return constants.getMultinameId(new Multiname(kind,name_index,namespace_index,namespace_set_index,qname_index,params),true);
}

Fixed version (ground truth):
private static int parseMultiName(ConstantPool constants,Flasm3Lexer lexer) throws ParseException, IOException {
  ParsedSymbol s=lexer.lex();
  int kind=0;
  int name_index=-1;
  int namespace_index=-1;
  int namespace_set_index=-1;
  int qname_index=-1;
  List<Integer> params=new ArrayList<>();
switch (s.type) {
case ParsedSymbol.TYPE_KEYWORD_NULL:
    return 0;
case ParsedSymbol.TYPE_KEYWORD_QNAME:
  kind=Multiname.QNAME;
break;
case ParsedSymbol.TYPE_KEYWORD_QNAMEA:
kind=Multiname.QNAMEA;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAME:
kind=Multiname.RTQNAME;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEA:
kind=Multiname.RTQNAMEA;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEL:
kind=Multiname.RTQNAMEL;
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMELA:
kind=Multiname.RTQNAMELA;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAME:
kind=Multiname.MULTINAME;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEA:
kind=Multiname.MULTINAMEA;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEL:
kind=Multiname.MULTINAMEL;
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMELA:
kind=Multiname.MULTINAMELA;
break;
case ParsedSymbol.TYPE_KEYWORD_TYPENAME:
kind=Multiname.TYPENAME;
break;
default :
throw new ParseException("String_Node_Str",lexer.yyline());
}
switch (s.type) {
case ParsedSymbol.TYPE_KEYWORD_QNAME:
case ParsedSymbol.TYPE_KEYWORD_QNAMEA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
namespace_index=parseNamespace(constants,lexer);
expected(ParsedSymbol.TYPE_COMMA,"String_Node_Str",lexer);
ParsedSymbol name=lexer.lex();
if (name.type == ParsedSymbol.TYPE_KEYWORD_NULL) {
name_index=0;
}
 else {
expected(name,ParsedSymbol.TYPE_STRING,"String_Node_Str");
name_index=constants.getStringId((String)name.value,true);
}
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAME:
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
ParsedSymbol rtqName=lexer.lex();
if (rtqName.type == ParsedSymbol.TYPE_KEYWORD_NULL) {
name_index=0;
}
 else {
expected(rtqName,ParsedSymbol.TYPE_STRING,"String_Node_Str");
name_index=constants.getStringId((String)rtqName.value,true);
}
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_RTQNAMEL:
case ParsedSymbol.TYPE_KEYWORD_RTQNAMELA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAME:
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
ParsedSymbol mName=lexer.lex();
if (mName.type == ParsedSymbol.TYPE_KEYWORD_NULL) {
name_index=0;
}
 else {
expected(mName,ParsedSymbol.TYPE_STRING,"String_Node_Str");
name_index=constants.getStringId((String)mName.value,true);
}
expected(ParsedSymbol.TYPE_COMMA,"String_Node_Str",lexer);
namespace_set_index=parseNamespaceSet(constants,lexer);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_MULTINAMEL:
case ParsedSymbol.TYPE_KEYWORD_MULTINAMELA:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
namespace_set_index=parseNamespaceSet(constants,lexer);
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
case ParsedSymbol.TYPE_KEYWORD_TYPENAME:
expected(ParsedSymbol.TYPE_PARENT_OPEN,"String_Node_Str",lexer);
qname_index=parseMultiName(constants,lexer);
expected(ParsedSymbol.TYPE_LOWERTHAN,"String_Node_Str",lexer);
params.add(parseMultiName(constants,lexer));
ParsedSymbol nt=lexer.lex();
while (nt.type == ParsedSymbol.TYPE_COMMA) {
params.add(parseMultiName(constants,lexer));
nt=lexer.lex();
}
expected(nt,ParsedSymbol.TYPE_GREATERTHAN,"String_Node_Str");
expected(ParsedSymbol.TYPE_PARENT_CLOSE,"String_Node_Str",lexer);
break;
}
return constants.getMultinameId(new Multiname(kind,name_index,namespace_index,namespace_set_index,qname_index,params),true);
}