Program: 25435
Project: 25435
Buggy source:
/** 
 * Ask for parameters and then execute.
 */
public void run(String arg){
  ImagePlus imp=IJ.getImage();
  if (null == imp) {
    IJ.showMessage("String_Node_Str");
    return;
  }
  if (imp.getBitDepth() != 8) {
    IJ.showMessage("String_Node_Str","String_Node_Str");
    return;
  }
  GenericDialog gd=new GenericDialog("String_Node_Str");
  String[] methods={"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"};
  final Package p=getClass().getPackage();
  final String version=p == null ? null : p.getImplementationVersion();
  final String versionSuffix=version == null ? "String_Node_Str" : "String_Node_Str" + version;
  gd.addMessage("String_Node_Str" + versionSuffix);
  gd.addChoice("String_Node_Str",methods,methods[0]);
  gd.addNumericField("String_Node_Str",15,0);
  gd.addMessage("String_Node_Str");
  gd.addNumericField("String_Node_Str",0,0);
  gd.addNumericField("String_Node_Str",0,0);
  gd.addCheckbox("String_Node_Str",true);
  if (imp.getStackSize() > 1) {
    gd.addCheckbox("String_Node_Str",false);
  }
  gd.addMessage("String_Node_Str");
  gd.showDialog();
  if (gd.wasCanceled())   return;
  String myMethod=gd.getNextChoice();
  int radius=(int)gd.getNextNumber();
  double par1=(double)gd.getNextNumber();
  double par2=(double)gd.getNextNumber();
  boolean doIwhite=gd.getNextBoolean();
  boolean doIstack=false;
  int stackSize=imp.getStackSize();
  if (stackSize > 1)   doIstack=gd.getNextBoolean();
  if (myMethod.equals("String_Node_Str")) {
    ImageProcessor ip=imp.getProcessor();
    int xe=ip.getWidth();
    int ye=ip.getHeight();
    int ml=methods.length;
    ImagePlus imp2, imp3;
    ImageStack tstack=null, stackNew;
    if (stackSize > 1 && doIstack) {
      boolean doItAnyway=true;
      if (stackSize > 25) {
        YesNoCancelDialog d=new YesNoCancelDialog(IJ.getInstance(),"String_Node_Str","String_Node_Str" + stackSize + "String_Node_Str");
        if (!d.yesPressed()) {
          doItAnyway=false;
        }
        if (d.cancelPressed())         return;
      }
      for (int j=1; j <= stackSize; j++) {
        imp.setSlice(j);
        ip=imp.getProcessor();
        tstack=new ImageStack(xe,ye);
        for (int k=1; k < ml; k++)         tstack.addSlice(methods[k],ip.duplicate());
        imp2=new ImagePlus("String_Node_Str",tstack);
        imp2.updateAndDraw();
        for (int k=1; k < ml; k++) {
          imp2.setSlice(k);
          Object[] result=exec(imp2,methods[k],radius,par1,par2,doIwhite);
        }
        CanvasResizer cr=new CanvasResizer();
        stackNew=cr.expandStack(tstack,(xe + 2),(ye + 18),1,1);
        imp3=new ImagePlus("String_Node_Str",stackNew);
        imp3.updateAndDraw();
        MontageMaker mm=new MontageMaker();
        mm.makeMontage(imp3,3,3,1.0,1,(ml - 1),1,0,true);
      }
      imp.setSlice(1);
      IJ.run("String_Node_Str","String_Node_Str");
      return;
    }
 else {
      tstack=new ImageStack(xe,ye);
      for (int k=1; k < ml; k++)       tstack.addSlice(methods[k],ip.duplicate());
      imp2=new ImagePlus("String_Node_Str",tstack);
      imp2.updateAndDraw();
      for (int k=1; k < ml; k++) {
        imp2.setSlice(k);
        Object[] result=exec(imp2,methods[k],radius,par1,par2,doIwhite);
      }
      CanvasResizer cr=new CanvasResizer();
      stackNew=cr.expandStack(tstack,(xe + 2),(ye + 18),1,1);
      imp3=new ImagePlus("String_Node_Str",stackNew);
      imp3.updateAndDraw();
      MontageMaker mm=new MontageMaker();
      mm.makeMontage(imp3,3,3,1.0,1,(ml - 1),1,0,true);
      return;
    }
  }
 else {
    if (stackSize > 1 && doIstack) {
      for (int k=1; k <= stackSize; k++) {
        imp.setSlice(k);
        Object[] result=exec(imp,myMethod,radius,par1,par2,doIwhite);
      }
      imp.setSlice(1);
    }
 else {
      Object[] result=exec(imp,myMethod,radius,par1,par2,doIwhite);
    }
  }
}

Fixed version (ground truth):
/** 
 * Ask for parameters and then execute.
 */
public void run(String arg){
  ImagePlus imp=IJ.getImage();
  if (null == imp) {
    IJ.showMessage("String_Node_Str");
    return;
  }
  if (imp.getBitDepth() != 8) {
    IJ.showMessage("String_Node_Str","String_Node_Str");
    return;
  }
  GenericDialog gd=new GenericDialog("String_Node_Str");
  String[] methods={"String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str","String_Node_Str"};
  gd.addMessage("String_Node_Str");
  gd.addChoice("String_Node_Str",methods,methods[0]);
  gd.addNumericField("String_Node_Str",15,0);
  gd.addMessage("String_Node_Str");
  gd.addNumericField("String_Node_Str",0,0);
  gd.addNumericField("String_Node_Str",0,0);
  gd.addCheckbox("String_Node_Str",true);
  if (imp.getStackSize() > 1) {
    gd.addCheckbox("String_Node_Str",false);
  }
  gd.addMessage("String_Node_Str");
  gd.showDialog();
  if (gd.wasCanceled())   return;
  String myMethod=gd.getNextChoice();
  int radius=(int)gd.getNextNumber();
  double par1=(double)gd.getNextNumber();
  double par2=(double)gd.getNextNumber();
  boolean doIwhite=gd.getNextBoolean();
  boolean doIstack=false;
  int stackSize=imp.getStackSize();
  if (stackSize > 1)   doIstack=gd.getNextBoolean();
  if (myMethod.equals("String_Node_Str")) {
    ImageProcessor ip=imp.getProcessor();
    int xe=ip.getWidth();
    int ye=ip.getHeight();
    int ml=methods.length;
    ImagePlus imp2, imp3;
    ImageStack tstack=null, stackNew;
    if (stackSize > 1 && doIstack) {
      boolean doItAnyway=true;
      if (stackSize > 25) {
        YesNoCancelDialog d=new YesNoCancelDialog(IJ.getInstance(),"String_Node_Str","String_Node_Str" + stackSize + "String_Node_Str");
        if (!d.yesPressed()) {
          doItAnyway=false;
        }
        if (d.cancelPressed())         return;
      }
      for (int j=1; j <= stackSize; j++) {
        imp.setSlice(j);
        ip=imp.getProcessor();
        tstack=new ImageStack(xe,ye);
        for (int k=1; k < ml; k++)         tstack.addSlice(methods[k],ip.duplicate());
        imp2=new ImagePlus("String_Node_Str",tstack);
        imp2.updateAndDraw();
        for (int k=1; k < ml; k++) {
          imp2.setSlice(k);
          Object[] result=exec(imp2,methods[k],radius,par1,par2,doIwhite);
        }
        CanvasResizer cr=new CanvasResizer();
        stackNew=cr.expandStack(tstack,(xe + 2),(ye + 18),1,1);
        imp3=new ImagePlus("String_Node_Str",stackNew);
        imp3.updateAndDraw();
        MontageMaker mm=new MontageMaker();
        mm.makeMontage(imp3,3,3,1.0,1,(ml - 1),1,0,true);
      }
      imp.setSlice(1);
      IJ.run("String_Node_Str","String_Node_Str");
      return;
    }
 else {
      tstack=new ImageStack(xe,ye);
      for (int k=1; k < ml; k++)       tstack.addSlice(methods[k],ip.duplicate());
      imp2=new ImagePlus("String_Node_Str",tstack);
      imp2.updateAndDraw();
      for (int k=1; k < ml; k++) {
        imp2.setSlice(k);
        Object[] result=exec(imp2,methods[k],radius,par1,par2,doIwhite);
      }
      CanvasResizer cr=new CanvasResizer();
      stackNew=cr.expandStack(tstack,(xe + 2),(ye + 18),1,1);
      imp3=new ImagePlus("String_Node_Str",stackNew);
      imp3.updateAndDraw();
      MontageMaker mm=new MontageMaker();
      mm.makeMontage(imp3,3,3,1.0,1,(ml - 1),1,0,true);
      return;
    }
  }
 else {
    if (stackSize > 1 && doIstack) {
      for (int k=1; k <= stackSize; k++) {
        imp.setSlice(k);
        Object[] result=exec(imp,myMethod,radius,par1,par2,doIwhite);
      }
      imp.setSlice(1);
    }
 else {
      Object[] result=exec(imp,myMethod,radius,par1,par2,doIwhite);
    }
  }
}