Program: 24639
Project: 24639
Buggy source:
private void parseActions(String[] actions) throws BadActionRequestException {
  for (  String action : actions) {
    String[] tokens=action.split("String_Node_Str");
    String cmd=tokens[0];
    Player player=getPlayerByName(tokens[1]);
    if (player == null)     throw new BadActionRequestException("String_Node_Str" + tokens[1]);
    int value=0;
    try {
      value=Integer.parseInt(tokens[2]);
    }
 catch (    NumberFormatException e) {
      throw new BadActionRequestException("String_Node_Str" + tokens[2]);
    }
    int value2=0;
    if (tokens.length == 4) {
      try {
        value2=Integer.parseInt(tokens[3]);
      }
 catch (      NumberFormatException e) {
        throw new BadActionRequestException("String_Node_Str" + tokens[2]);
      }
    }
switch (cmd) {
case ATTR_UP:
      player.increaseAttr(value);
    break;
case EQUIP:
  GameItem item=player.getInventory().getItem(value);
if (item != null) {
  if (item instanceof Weapon) {
    player.equipWeapon((Weapon)item);
  }
 else   if (item instanceof Armor) {
    player.equipArmor((Armor)item);
  }
 else   throw new BadActionRequestException("String_Node_Str" + value);
}
 else throw new BadActionRequestException("String_Node_Str" + value);
break;
case UNEQUIP:
player.unEquipItem(value);
break;
case REFINE:
GameItem itemToRefine=player.getInventory().getItem(value);
if (itemToRefine != null) {
if (itemToRefine instanceof EquippableItem) {
((EquippableItem)itemToRefine).refine();
}
 else throw new BadActionRequestException("String_Node_Str" + value);
}
 else throw new BadActionRequestException("String_Node_Str" + value);
break;
case ATTACK:
Enemy target=(Enemy)getGameCharacterByRuntimeID(value);
if (++player.atkTime >= ATK_INTERVAL / (1 + player.getTotalStat(GameCharacter.ASPD) / 100.0)) {
int dmg=player.dealDamage(target);
animations.add(new Animation(player.getX(),player.getY(),0.5f,0,25,dmg + "String_Node_Str"));
player.atkTime=0;
if (target.getHP() <= 0) {
player.gainBaseExperience(target.experience);
player.gainJobExperience(target.experience);
player.gainStatExperience(target.experience);
chests.add(target.onDeath());
}
}
if (++target.atkTime >= ATK_INTERVAL / (1 + target.getTotalStat(GameCharacter.ASPD) / 100.0)) {
int dmg=target.dealDamage(player);
animations.add(new Animation(player.getX(),player.getY() + 80,0.5f,0,25,dmg + "String_Node_Str"));
target.atkTime=0;
if (player.getHP() <= 0) {
}
}
break;
case SKILL_USE:
GameCharacter skTarget=getGameCharacterByRuntimeID(value2);
if (skTarget != null) player.useSkill(value,skTarget);
break;
case CHAT:
animations.add(new Animation(player.getX(),player.getY(),2.0f,0,0,player.name + "String_Node_Str" + tokens[4]));
break;
default :
throw new BadActionRequestException("String_Node_Str" + tokens[0]);
}
}
}

Fixed version (ground truth):
private void parseActions(String[] actions) throws BadActionRequestException {
  for (  String action : actions) {
    String[] tokens=action.split("String_Node_Str");
    String cmd=tokens[0];
    Player player=getPlayerByName(tokens[1]);
    if (player == null)     throw new BadActionRequestException("String_Node_Str" + tokens[1]);
    int value=0;
    try {
      value=Integer.parseInt(tokens[2]);
    }
 catch (    NumberFormatException e) {
      throw new BadActionRequestException("String_Node_Str" + tokens[2]);
    }
    int value2=0;
    if (tokens.length == 4) {
      try {
        value2=Integer.parseInt(tokens[3]);
      }
 catch (      NumberFormatException e) {
        throw new BadActionRequestException("String_Node_Str" + tokens[2]);
      }
    }
switch (cmd) {
case ATTR_UP:
      player.increaseAttr(value);
    break;
case EQUIP:
  GameItem item=player.getInventory().getItem(value);
if (item != null) {
  if (item instanceof Weapon) {
    player.equipWeapon((Weapon)item);
  }
 else   if (item instanceof Armor) {
    player.equipArmor((Armor)item);
  }
 else   throw new BadActionRequestException("String_Node_Str" + value);
}
 else throw new BadActionRequestException("String_Node_Str" + value);
break;
case UNEQUIP:
player.unEquipItem(value);
break;
case REFINE:
GameItem itemToRefine=player.getInventory().getItem(value);
if (itemToRefine != null) {
if (itemToRefine instanceof EquippableItem) {
((EquippableItem)itemToRefine).refine();
}
 else throw new BadActionRequestException("String_Node_Str" + value);
}
 else throw new BadActionRequestException("String_Node_Str" + value);
break;
case ATTACK:
Enemy target=(Enemy)getGameCharacterByRuntimeID(value);
if (target != null && target.isAlive()) {
if (++player.atkTime >= ATK_INTERVAL / (1 + player.getTotalStat(GameCharacter.ASPD) / 100.0)) {
int dmg=player.dealDamage(target);
animations.add(new Animation(player.getX(),player.getY(),0.5f,0,25,dmg + "String_Node_Str"));
player.atkTime=0;
if (target.getHP() <= 0) {
player.gainBaseExperience(target.experience);
player.gainJobExperience(target.experience);
player.gainStatExperience(target.experience);
chests.add(target.onDeath());
}
}
if (++target.atkTime >= ATK_INTERVAL / (1 + target.getTotalStat(GameCharacter.ASPD) / 100.0)) {
int dmg=target.dealDamage(player);
animations.add(new Animation(player.getX(),player.getY() + 80,0.5f,0,25,dmg + "String_Node_Str"));
target.atkTime=0;
if (player.getHP() <= 0) {
}
}
}
break;
case SKILL_USE:
Enemy skTarget=(Enemy)getGameCharacterByRuntimeID(value2);
if (skTarget != null) {
player.useSkill(value,skTarget);
if (skTarget.getHP() <= 0) {
player.gainBaseExperience(skTarget.experience);
player.gainJobExperience(skTarget.experience);
player.gainStatExperience(skTarget.experience);
chests.add(skTarget.onDeath());
}
}
break;
case CHAT:
animations.add(new Animation(player.getX(),player.getY(),2.0f,0,0,player.name + "String_Node_Str" + tokens[4]));
break;
default :
throw new BadActionRequestException("String_Node_Str" + tokens[0]);
}
}
}