Program: 166356
Project: 166356
Buggy source:
public VXModuleDef updateXModuleDefPermission(VXModuleDef vXModuleDef){
  List<VXGroupPermission> groupPermListNew=vXModuleDef.getGroupPermList();
  List<VXUserPermission> userPermListNew=vXModuleDef.getUserPermList();
  List<VXGroupPermission> groupPermListOld=new ArrayList<VXGroupPermission>();
  List<VXUserPermission> userPermListOld=new ArrayList<VXUserPermission>();
  XXModuleDef xModuleDef=daoManager.getXXModuleDef().getById(vXModuleDef.getId());
  VXModuleDef vModuleDefPopulateOld=xModuleDefService.populateViewBean(xModuleDef);
  List<XXGroupPermission> xgroupPermissionList=daoManager.getXXGroupPermission().findByModuleId(vXModuleDef.getId(),true);
  for (  XXGroupPermission xGrpPerm : xgroupPermissionList) {
    VXGroupPermission vXGrpPerm=xGroupPermissionService.populateViewBean(xGrpPerm);
    groupPermListOld.add(vXGrpPerm);
  }
  vModuleDefPopulateOld.setGroupPermList(groupPermListOld);
  List<XXUserPermission> xuserPermissionList=daoManager.getXXUserPermission().findByModuleId(vXModuleDef.getId(),true);
  for (  XXUserPermission xUserPerm : xuserPermissionList) {
    VXUserPermission vUserPerm=xUserPermissionService.populateViewBean(xUserPerm);
    userPermListOld.add(vUserPerm);
  }
  vModuleDefPopulateOld.setUserPermList(userPermListOld);
  if (groupPermListOld != null && groupPermListNew != null) {
    for (    VXGroupPermission newVXGroupPerm : groupPermListNew) {
      boolean isExist=false;
      for (      VXGroupPermission oldVXGroupPerm : groupPermListOld) {
        if (newVXGroupPerm.getModuleId().equals(oldVXGroupPerm.getModuleId()) && newVXGroupPerm.getGroupId().equals(oldVXGroupPerm.getGroupId())) {
          if (newVXGroupPerm.getIsAllowed() != oldVXGroupPerm.getIsAllowed()) {
            oldVXGroupPerm.setIsAllowed(newVXGroupPerm.getIsAllowed());
            oldVXGroupPerm=this.updateXGroupPermission(oldVXGroupPerm);
          }
          isExist=true;
        }
      }
      if (!isExist) {
        newVXGroupPerm=this.createXGroupPermission(newVXGroupPerm);
      }
    }
  }
  if (userPermListOld != null && userPermListNew != null) {
    for (    VXUserPermission newVXUserPerm : userPermListNew) {
      boolean isExist=false;
      for (      VXUserPermission oldVXUserPerm : userPermListOld) {
        if (newVXUserPerm.getModuleId().equals(oldVXUserPerm.getModuleId()) && newVXUserPerm.getUserId().equals(oldVXUserPerm.getUserId())) {
          if (newVXUserPerm.getIsAllowed() != oldVXUserPerm.getIsAllowed()) {
            oldVXUserPerm.setIsAllowed(newVXUserPerm.getIsAllowed());
            oldVXUserPerm=this.updateXUserPermission(oldVXUserPerm);
          }
          isExist=true;
        }
      }
      if (!isExist) {
        newVXUserPerm=this.createXUserPermission(newVXUserPerm);
      }
    }
  }
  vXModuleDef=xModuleDefService.updateResource(vXModuleDef);
  return vXModuleDef;
}

Fixed version (ground truth):
public VXModuleDef updateXModuleDefPermission(VXModuleDef vXModuleDef){
  List<VXGroupPermission> groupPermListNew=vXModuleDef.getGroupPermList();
  List<VXUserPermission> userPermListNew=vXModuleDef.getUserPermList();
  List<VXGroupPermission> groupPermListOld=new ArrayList<VXGroupPermission>();
  List<VXUserPermission> userPermListOld=new ArrayList<VXUserPermission>();
  XXModuleDef xModuleDef=daoManager.getXXModuleDef().getById(vXModuleDef.getId());
  VXModuleDef vModuleDefPopulateOld=xModuleDefService.populateViewBean(xModuleDef);
  List<XXGroupPermission> xgroupPermissionList=daoManager.getXXGroupPermission().findByModuleId(vXModuleDef.getId(),true);
  for (  XXGroupPermission xGrpPerm : xgroupPermissionList) {
    VXGroupPermission vXGrpPerm=xGroupPermissionService.populateViewBean(xGrpPerm);
    groupPermListOld.add(vXGrpPerm);
  }
  vModuleDefPopulateOld.setGroupPermList(groupPermListOld);
  List<XXUserPermission> xuserPermissionList=daoManager.getXXUserPermission().findByModuleId(vXModuleDef.getId(),true);
  for (  XXUserPermission xUserPerm : xuserPermissionList) {
    VXUserPermission vUserPerm=xUserPermissionService.populateViewBean(xUserPerm);
    userPermListOld.add(vUserPerm);
  }
  vModuleDefPopulateOld.setUserPermList(userPermListOld);
  if (groupPermListOld != null && groupPermListNew != null) {
    for (    VXGroupPermission newVXGroupPerm : groupPermListNew) {
      boolean isExist=false;
      for (      VXGroupPermission oldVXGroupPerm : groupPermListOld) {
        if (newVXGroupPerm.getModuleId().equals(oldVXGroupPerm.getModuleId()) && newVXGroupPerm.getGroupId().equals(oldVXGroupPerm.getGroupId())) {
          if (!newVXGroupPerm.getIsAllowed().equals(oldVXGroupPerm.getIsAllowed())) {
            oldVXGroupPerm.setIsAllowed(newVXGroupPerm.getIsAllowed());
            oldVXGroupPerm=this.updateXGroupPermission(oldVXGroupPerm);
          }
          isExist=true;
        }
      }
      if (!isExist) {
        newVXGroupPerm=this.createXGroupPermission(newVXGroupPerm);
      }
    }
  }
  if (userPermListOld != null && userPermListNew != null) {
    for (    VXUserPermission newVXUserPerm : userPermListNew) {
      boolean isExist=false;
      for (      VXUserPermission oldVXUserPerm : userPermListOld) {
        if (newVXUserPerm.getModuleId().equals(oldVXUserPerm.getModuleId()) && newVXUserPerm.getUserId().equals(oldVXUserPerm.getUserId())) {
          if (!newVXUserPerm.getIsAllowed().equals(oldVXUserPerm.getIsAllowed())) {
            oldVXUserPerm.setIsAllowed(newVXUserPerm.getIsAllowed());
            oldVXUserPerm=this.updateXUserPermission(oldVXUserPerm);
          }
          isExist=true;
        }
      }
      if (!isExist) {
        newVXUserPerm=this.createXUserPermission(newVXUserPerm);
      }
    }
  }
  vXModuleDef=xModuleDefService.updateResource(vXModuleDef);
  return vXModuleDef;
}