Program: 30538
Project: 30538
Buggy source:
public CraftingTreeProcess(ICraftingGrid cc,CraftingJob job,ICraftingPatternDetails details,CraftingTreeNode craftingTreeNode,int depth,World world){
  parent=craftingTreeNode;
  this.details=details;
  this.job=job;
  this.depth=depth;
  world=job.getWorld();
  if (details.isCraftable()) {
    IAEItemStack list[]=details.getInputs();
    InventoryCrafting ic=new InventoryCrafting(new ContainerNull(),3,3);
    IAEItemStack[] is=details.getInputs();
    for (int x=0; x < ic.getSizeInventory(); x++)     ic.setInventorySlotContents(x,is[x] == null ? null : is[x].getItemStack());
    FMLCommonHandler.instance().firePlayerCraftingEvent(Platform.getPlayer((WorldServer)world),details.getOutput(ic,world),ic);
    for (int x=0; x < ic.getSizeInventory(); x++) {
      ItemStack g=ic.getStackInSlot(x);
      if (g != null && g.stackSize > 1)       fullsimulation=true;
    }
    for (int x=0; x < list.length; x++) {
      IAEItemStack part=list[x];
      if (part != null) {
        ItemStack g=part.getItemStack();
        boolean isAnInput=false;
        for (        IAEItemStack a : is) {
          if (g != null && a != null && a.equals(g))           isAnInput=true;
        }
        if (isAnInput)         limitQty=true;
        if (g.getItem().hasContainerItem(g))         limitQty=containerItems=true;
      }
    }
    boolean complicated=false;
    if (containerItems || complicated) {
      for (int x=0; x < list.length; x++) {
        IAEItemStack part=list[x];
        if (part != null)         nodes.put(new CraftingTreeNode(cc,job,part.copy(),this,x,depth + 1),part.getStackSize());
      }
    }
 else {
      for (      IAEItemStack part : details.getCondencedInputs()) {
        for (int x=0; x < list.length; x++) {
          IAEItemStack ppart=list[x];
          if (part != null && part.equals(ppart)) {
            nodes.put(new CraftingTreeNode(cc,job,part.copy(),this,x,depth + 1),part.getStackSize());
            break;
          }
        }
      }
    }
  }
 else {
    IAEItemStack list[]=details.getInputs();
    IAEItemStack[] is=details.getInputs();
    for (int x=0; x < list.length; x++) {
      IAEItemStack part=list[x];
      if (part != null) {
        ItemStack g=part.getItemStack();
        boolean isAnInput=false;
        for (        IAEItemStack a : is) {
          if (g != null && a != null && a.equals(g))           isAnInput=true;
        }
        if (isAnInput)         limitQty=true;
      }
    }
    for (    IAEItemStack part : details.getCondencedInputs()) {
      nodes.put(new CraftingTreeNode(cc,job,part.copy(),this,-1,depth + 1),part.getStackSize());
    }
  }
}

Fixed version (ground truth):
public CraftingTreeProcess(ICraftingGrid cc,CraftingJob job,ICraftingPatternDetails details,CraftingTreeNode craftingTreeNode,int depth,World world){
  parent=craftingTreeNode;
  this.details=details;
  this.job=job;
  this.depth=depth;
  world=job.getWorld();
  if (details.isCraftable()) {
    IAEItemStack list[]=details.getInputs();
    InventoryCrafting ic=new InventoryCrafting(new ContainerNull(),3,3);
    IAEItemStack[] is=details.getInputs();
    for (int x=0; x < ic.getSizeInventory(); x++)     ic.setInventorySlotContents(x,is[x] == null ? null : is[x].getItemStack());
    FMLCommonHandler.instance().firePlayerCraftingEvent(Platform.getPlayer((WorldServer)world),details.getOutput(ic,world),ic);
    for (int x=0; x < ic.getSizeInventory(); x++) {
      ItemStack g=ic.getStackInSlot(x);
      if (g != null && g.stackSize > 1)       fullsimulation=true;
    }
    for (    IAEItemStack part : details.getCondencedInputs()) {
      ItemStack g=part.getItemStack();
      boolean isAnInput=false;
      for (      IAEItemStack a : details.getCondencedOutputs()) {
        if (g != null && a != null && a.equals(g))         isAnInput=true;
      }
      if (isAnInput)       limitQty=true;
      if (g.getItem().hasContainerItem(g))       limitQty=containerItems=true;
    }
    boolean complicated=false;
    if (containerItems || complicated) {
      for (int x=0; x < list.length; x++) {
        IAEItemStack part=list[x];
        if (part != null)         nodes.put(new CraftingTreeNode(cc,job,part.copy(),this,x,depth + 1),part.getStackSize());
      }
    }
 else {
      for (      IAEItemStack part : details.getCondencedInputs()) {
        for (int x=0; x < list.length; x++) {
          IAEItemStack ppart=list[x];
          if (part != null && part.equals(ppart)) {
            nodes.put(new CraftingTreeNode(cc,job,part.copy(),this,x,depth + 1),part.getStackSize());
            break;
          }
        }
      }
    }
  }
 else {
    for (    IAEItemStack part : details.getCondencedInputs()) {
      ItemStack g=part.getItemStack();
      boolean isAnInput=false;
      for (      IAEItemStack a : details.getCondencedOutputs()) {
        if (g != null && a != null && a.equals(g))         isAnInput=true;
      }
      if (isAnInput)       limitQty=true;
    }
    for (    IAEItemStack part : details.getCondencedInputs()) {
      nodes.put(new CraftingTreeNode(cc,job,part.copy(),this,-1,depth + 1),part.getStackSize());
    }
  }
}