Program: 145954
Project: 145954
Buggy source:
@Override public void onUpdate(){
  super.onUpdate();
  if (!this.dead && attacher != null) {
    if (attacher instanceof EntityPlayer)     this.setPositionAndRotation(attacher.posX,attacher.posY + 0.05,attacher.posZ,attacher.rotationYaw,attacher.rotationPitch);
 else     this.setPositionAndRotation(attacher.posX,attacher.posY + attacher.height + 0.05,attacher.posZ,attacher.rotationYaw,attacher.rotationPitch);
    if (++tickSinceBite >= 15) {
      dataWatcher.updateObject(20,Integer.valueOf(attacher.getEntityId()));
      tickSinceBite=0;
      float health=attacher.getHealth() - 1;
      if (!(attacher instanceof EntityPlayer && ((EntityPlayer)attacher).capabilities.isCreativeMode)) {
        attacher.setHealth(health);
        if (health <= 0 && !worldObj.isRemote) {
          NBTTagCompound nbt=attacher.getEntityData();
          if (!nbt.getBoolean("String_Node_Str")) {
            nbt.setBoolean("String_Node_Str",true);
            attacher=null;
            MobHelper.spawnCreature(worldObj,EntityHLZombie.class,this,false);
            dataWatcher.updateObject(20,Integer.valueOf(0));
            this.setDead();
          }
        }
      }
    }
    if (attacher != null && attacher.isDead) {
      attacher=null;
    }
  }
 else {
    if (worldObj.isRemote) {
      int id=dataWatcher.getWatchableObjectInt(20);
      Entity e=worldObj.getEntityByID(id);
      if (e == null || e instanceof EntityLivingBase)       attacher=(EntityLivingBase)e;
    }
 else {
      dataWatcher.updateObject(20,Integer.valueOf(0));
    }
  }
}

Fixed version (ground truth):
@Override public void onUpdate(){
  super.onUpdate();
  if (!this.dead) {
    if (worldObj.isRemote) {
      int id=dataWatcher.getWatchableObjectInt(20);
      Entity e=worldObj.getEntityByID(id);
      if (e == null || e instanceof EntityLivingBase)       attacher=(EntityLivingBase)e;
    }
 else {
      dataWatcher.updateObject(20,Integer.valueOf(0));
    }
    if (attacher != null) {
      if (attacher instanceof EntityPlayer) {
        this.setPositionAndRotation(attacher.posX,attacher.posY + 0.05,attacher.posZ,attacher.rotationYaw,attacher.rotationPitch);
      }
 else {
        this.setPositionAndRotation(attacher.posX,attacher.posY + attacher.height + 0.05,attacher.posZ,attacher.rotationYaw,attacher.rotationPitch);
      }
      if (++tickSinceBite >= 15) {
        dataWatcher.updateObject(20,Integer.valueOf(attacher.getEntityId()));
        tickSinceBite=0;
        float health=attacher.getHealth() - 1;
        if (!(attacher instanceof EntityPlayer && ((EntityPlayer)attacher).capabilities.isCreativeMode)) {
          attacher.setHealth(health);
          if (health <= 0 && !worldObj.isRemote) {
            NBTTagCompound nbt=attacher.getEntityData();
            if (!nbt.getBoolean("String_Node_Str")) {
              nbt.setBoolean("String_Node_Str",true);
              attacher=null;
              MobHelper.spawnCreature(worldObj,EntityHLZombie.class,this,false);
              dataWatcher.updateObject(20,Integer.valueOf(0));
              this.setDead();
            }
          }
        }
      }
      if (attacher != null && attacher.isDead) {
        attacher=null;
      }
    }
  }
}