Program: 172377
Project: 172377
Buggy source:
public void handleSkillHurt(Player player,SkillHurtVO hurtVO){
  if (player.getGangId() == 0) {
    return;
  }
  Gang gang=gangService.getGang(player.getGangId());
  GangDungeon gangDungeon=serialDataService.getData().getGangMap().get(player.getGangId());
  GMember member=gang.getMembers().get(player.getPlayerId());
  if (member == null) {
    return;
  }
  if (hurtVO.targetType == 0) {
    member.hp=member.hp - hurtVO.hurtValue;
    if (member.hp <= 0) {
      onBattleEnd(player);
    }
  }
 else {
    Monster m=gangDungeon.getMonsterMap().get(hurtVO.targetId);
    int hp=m.getCurrentHp() - hurtVO.hurtValue > 0 ? m.getCurrentHp() - hurtVO.hurtValue : 0;
    m.setCurrentHp(hp);
    member.hurt+=hurtVO.hurtValue;
    if (gangDungeon.checkDeath()) {
      gangDungeon.setHasOpen(0);
      gangDungeon.setLayer(gangDungeon.getLayer() + 1);
      onBattleEnd(player);
    }
  }
  GangCopyCfg cfg=ConfigData.getConfig(GangCopyCfg.class,gangDungeon.getLayer());
  float progress=gangDungeon.getProgress();
  for (int i=0; i < cfg.progress.length; i++) {
    if (progress >= cfg.progress[i]) {
      if (gangDungeon.checkAndAdd(i)) {
        ServerLogger.warn("String_Node_Str" + cfg.progress[i]);
        List<GoodsEntry> rewards=new ArrayList<>();
        int[] itemArr=cfg.progressRewards[i];
        for (int k=0; k < itemArr.length; k+=2) {
          GoodsEntry goodsEntry=new GoodsEntry(itemArr[k],itemArr[k + 1]);
          rewards.add(goodsEntry);
        }
        String title=ConfigData.getConfig(ErrCode.class,Response.GUILD_COPY_MAIL_TITLE).tips;
        String content=ConfigData.getConfig(ErrCode.class,Response.GUILD_COPY_MAIL_CONTENT).tips;
        for (        int pid : gang.getMembers().keySet()) {
          mailService.sendSysMail(title,content,rewards,pid,LogConsume.GUILD_COPY_REWARD);
        }
        break;
      }
    }
  }
}

Fixed version (ground truth):
public void handleSkillHurt(Player player,SkillHurtVO hurtVO){
  if (player.getGangId() == 0) {
    return;
  }
  Gang gang=gangService.getGang(player.getGangId());
  GangDungeon gangDungeon=serialDataService.getData().getGangMap().get(player.getGangId());
  GMember member=gang.getMembers().get(player.getPlayerId());
  if (member == null) {
    return;
  }
  if (hurtVO.targetType == 0) {
    member.hp=member.hp - hurtVO.hurtValue;
    if (member.hp <= 0) {
      onBattleEnd(player);
    }
  }
 else {
    Monster m=gangDungeon.getMonsterMap().get(hurtVO.targetId);
    int hp=m.getCurrentHp() - hurtVO.hurtValue > 0 ? m.getCurrentHp() - hurtVO.hurtValue : 0;
    m.setCurrentHp(hp);
    member.hurt+=hurtVO.hurtValue;
    if (gangDungeon.checkDeath()) {
      gangDungeon.setHasOpen(0);
      gangDungeon.setLayer(gangDungeon.getLayer() + 1);
      onBattleEnd(player);
    }
  }
  GangCopyCfg cfg=ConfigData.getConfig(GangCopyCfg.class,gangDungeon.getLayer());
  float progress=gangDungeon.getProgress();
  for (int i=0; i <= cfg.progress.length; i++) {
    if (progress >= cfg.progress[i]) {
      int step=i + 1;
      if (gangDungeon.checkAndAdd(step)) {
        ServerLogger.warn("String_Node_Str" + cfg.progress[i]);
        List<GoodsEntry> rewards=new ArrayList<>();
        int[][] itemArr=cfg.progressRewards.get(step);
        for (        int[] item : itemArr) {
          GoodsEntry goodsEntry=new GoodsEntry(item[0],item[1]);
          rewards.add(goodsEntry);
        }
        String title=ConfigData.getConfig(ErrCode.class,Response.GUILD_COPY_MAIL_TITLE).tips;
        String content=ConfigData.getConfig(ErrCode.class,Response.GUILD_COPY_MAIL_CONTENT).tips;
        for (        int pid : gang.getMembers().keySet()) {
          mailService.sendSysMail(title,content,rewards,pid,LogConsume.GUILD_COPY_REWARD);
        }
        break;
      }
    }
  }
}