Program: 34578
Project: 34578
Buggy source:
@Override protected void mouseClicked(int mouseX,int mouseY,int buttonId){
  if (buttonId == 1)   actionPerformed((GuiButton)buttonList.get(2));
 else   if (buttonId == 0 && !(mouseX < 24 || mouseX > width - 24 || mouseY < 24 || mouseY > height - 24)) {
    int offY=(int)offsetY.value();
    for (    CategoryDisplayElement element : categoryElements) {
      if (element.isMouseOver(mouseX,mouseY,offY)) {
        showObject(element.category.getCategoryObject());
        return;
      }
    }
    for (    ObjectDisplayElement element : objectElements) {
      if (element.isMouseOver(mouseX,mouseY,offY)) {
        showObject(element.object);
        return;
      }
    }
    KnowledgeObject<? extends IObjectHolder<?>> redirect=null;
    for (    PurchaseDisplayElement element : purchaseElements) {
      if (element.isMouseOver(mouseX,mouseY,(width >> 1) + (width >> 2) + 4)) {
        if (element.getStatus() == FragmentPurchaseStatus.NOT_BUYABLE && element.fragmentHasRedirect) {
          redirect=((KnowledgeFragment)element.object).getUnlockRedirect();
          break;
        }
 else         if (element.getStatus() == FragmentPurchaseStatus.CAN_PURCHASE && compendiumFile.getPoints() >= element.price) {
          Object obj=element.object;
          if (obj instanceof KnowledgeObject)           PacketPipeline.sendToServer(new S02CompendiumPurchase((KnowledgeObject)obj));
 else           if (obj instanceof KnowledgeFragment)           PacketPipeline.sendToServer(new S02CompendiumPurchase((KnowledgeFragment)obj));
 else           continue;
          return;
        }
      }
    }
    if (redirect != null) {
      showObject(redirect);
      moveToCurrentObject(true);
    }
  }
  if (currentObject != null) {
    int x=(width >> 1) + (width >> 2) + 4 - (guiPageTexWidth >> 1) + guiPageLeft;
    int y=(height >> 1) - (guiPageTexHeight >> 1) + guiPageTop;
    for (    Entry<KnowledgeFragment,Boolean> entry : currentObjectPages.get(pageIndex).entrySet()) {
      if (entry.getKey().onClick(this,x,y,mouseX,mouseY,buttonId,entry.getValue()))       return;
      y+=8 + entry.getKey().getHeight(this,entry.getValue());
    }
  }
  hasClickedButton=false;
  super.mouseClicked(mouseX,mouseY,buttonId);
  if (hasClickedButton)   hasClickedButton=false;
 else   dragMouseY=mouseY;
}

Fixed version (ground truth):
@Override protected void mouseClicked(int mouseX,int mouseY,int buttonId){
  if (buttonId == 1)   actionPerformed((GuiButton)buttonList.get(2));
 else   if (buttonId == 0 && !(mouseX < 24 || mouseX > width - 24 || mouseY < 24 || mouseY > height - 24)) {
    int offY=(int)offsetY.value();
    for (    ObjectDisplayElement element : objectElements) {
      if (element.isMouseOver(mouseX,mouseY,offY)) {
        showObject(element.object);
        return;
      }
    }
    for (    PurchaseDisplayElement element : purchaseElements) {
      if (element.isMouseOver(mouseX,mouseY,(width >> 1) + (width >> 2) + 4) && compendiumFile.getPoints() >= element.price) {
        Object obj=element.object;
        if (obj instanceof KnowledgeObject)         PacketPipeline.sendToServer(new S02CompendiumPurchase((KnowledgeObject)obj));
 else         if (obj instanceof KnowledgeFragment)         PacketPipeline.sendToServer(new S02CompendiumPurchase((KnowledgeFragment)obj));
 else         continue;
        return;
      }
    }
  }
  if (currentObject != null) {
    int x=(width >> 1) + (width >> 2) + 4 - (guiPageTexWidth >> 1) + guiPageLeft;
    int y=(height >> 1) - (guiPageTexHeight >> 1) + guiPageTop;
    for (    Entry<KnowledgeFragment,Boolean> entry : currentObjectPages.get(pageIndex).entrySet()) {
      if (entry.getKey().onClick(this,x,y,mouseX,mouseY,buttonId,entry.getValue()))       return;
      y+=8 + entry.getKey().getHeight(this,entry.getValue());
    }
  }
  hasClickedButton=false;
  super.mouseClicked(mouseX,mouseY,buttonId);
  if (hasClickedButton)   hasClickedButton=false;
 else   dragMouseY=mouseY;
}