Program: 70017
Project: 70017
Buggy source:
/** 
 * Convenient routine to render a marker
 */
protected final void renderMarker(Object oParent,IPrimitiveRenderer ipr,Marker m,Location lo,LineAttributes lia,Fill fPaletteEntry,DataPointHints dph,Integer markerSize,boolean bDeferred,boolean bConsiderTranspostion) throws ChartException {
  if (dph != null && (isNaN(dph.getOrthogonalValue()) || dph.isOutside())) {
    return;
  }
  Fill markerFill=m.getFill();
  m=goFactory.copyMarkerNoFill(m);
  if (dph != null && dph.getOrthogonalValue() instanceof Double) {
    fPaletteEntry=ChartUtil.convertFill(fPaletteEntry,((Double)dph.getOrthogonalValue()).doubleValue(),null);
  }
  if (m.getType().getValue() != MarkerType.ICON && fPaletteEntry != null) {
    m.setFill(fPaletteEntry);
  }
 else {
    m.setFill(goFactory.copyOf(markerFill));
  }
  final ScriptHandler sh=getRunTimeContext().getScriptHandler();
  ScriptHandler.callFunction(sh,ScriptHandler.BEFORE_DRAW_MARKER,m,dph,getRunTimeContext().getScriptContext());
  getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.BEFORE_DRAW_MARKER,m);
  Series se=getSeries();
  Object oSource=(oParent instanceof Legend) ? (StructureSource.createLegend((Legend)oParent)) : (WrappedStructureSource.createSeriesDataPoint(se,dph));
  boolean bTransposed=bConsiderTranspostion && ((ChartWithAxes)getModel()).isTransposed();
  final Location panningOffset=this.getPanningOffset();
  PrimitiveRenderEvent preCopy=null;
  if (m == null || (m != null && !(m.isSetVisible() && m.isVisible()))) {
    int iSize=5;
    if (m != null) {
      iSize=m.getSize();
    }
    if (lo instanceof Location3D) {
      final Oval3DRenderEvent ore=((EventObjectCache)ipr).getEventObject(oSource,Oval3DRenderEvent.class);
      Location3D lo3d=(Location3D)lo;
      ore.setLocation3D(new Location3D[]{goFactory.createLocation3D(lo3d.getX() - iSize,lo3d.getY() + iSize,lo3d.getZ()),goFactory.createLocation3D(lo3d.getX() - iSize,lo3d.getY() - iSize,lo3d.getZ()),goFactory.createLocation3D(lo3d.getX() + iSize,lo3d.getY() - iSize,lo3d.getZ()),goFactory.createLocation3D(lo3d.getX() + iSize,lo3d.getY() + iSize,lo3d.getZ())});
      preCopy=ore.copy();
    }
 else {
      final OvalRenderEvent ore=((EventObjectCache)ipr).getEventObject(oSource,OvalRenderEvent.class);
      ore.setBounds(goFactory.createBounds(lo.getX() - iSize,lo.getY() - iSize,iSize * 2,iSize * 2));
      preCopy=ore.copy();
    }
  }
 else   if (m.isSetVisible() && m.isVisible()) {
    final MarkerRenderer mr=new MarkerRenderer(this.getDevice(),oSource,lo,lia,m.getFill(),m,markerSize,this.getDeferredCache(),bDeferred,bTransposed);
    mr.draw(ipr);
    preCopy=mr.getRenderArea();
  }
  if (this.isInteractivityEnabled() && dph != null) {
    if (!(lo instanceof Location3D) || ((lo instanceof Location3D) && (this.get3DEngine().processEvent(preCopy,panningOffset.getX(),panningOffset.getY()) != null))) {
      final EList<Trigger> elTriggers=se.getTriggers();
      if (!elTriggers.isEmpty()) {
        final StructureSource iSource=(oParent instanceof Legend) ? (StructureSource.createSeries(se)) : (WrappedStructureSource.createSeriesDataPoint(se,dph));
        final InteractionEvent iev=((EventObjectCache)ipr).getEventObject(iSource,InteractionEvent.class);
        iev.setCursor(se.getCursor());
        Trigger tg;
        for (int t=0; t < elTriggers.size(); t++) {
          tg=goFactory.copyOf(elTriggers.get(t));
          this.processTrigger(tg,iSource);
          iev.addTrigger(tg);
        }
        iev.setHotSpot(preCopy);
        ipr.enableInteraction(iev);
      }
    }
  }
  ScriptHandler.callFunction(sh,ScriptHandler.AFTER_DRAW_MARKER,m,dph,getRunTimeContext().getScriptContext());
  getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.AFTER_DRAW_MARKER,m);
}

Fixed version (ground truth):
/** 
 * Convenient routine to render a marker
 */
protected final void renderMarker(Object oParent,IPrimitiveRenderer ipr,Marker m,Location lo,LineAttributes lia,Fill fPaletteEntry,DataPointHints dph,Integer markerSize,boolean bDeferred,boolean bConsiderTranspostion) throws ChartException {
  if (dph != null && (isNaN(dph.getOrthogonalValue()) || dph.isOutside())) {
    return;
  }
  Fill markerFill=m.getFill();
  m=goFactory.copyMarkerNoFill(m);
  if (dph != null && dph.getOrthogonalValue() instanceof Double) {
    fPaletteEntry=ChartUtil.convertFill(fPaletteEntry,((Double)dph.getOrthogonalValue()).doubleValue(),null);
  }
  if (m.getType().getValue() != MarkerType.ICON && fPaletteEntry != null) {
    m.setFill(fPaletteEntry);
  }
 else {
    m.setFill(goFactory.copyOf(markerFill));
  }
  final ScriptHandler sh=getRunTimeContext().getScriptHandler();
  ScriptHandler.callFunction(sh,ScriptHandler.BEFORE_DRAW_MARKER,m,dph,getRunTimeContext().getScriptContext());
  getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.BEFORE_DRAW_MARKER,m);
  Series se=getSeries();
  Object oSource=(oParent instanceof Legend) ? (StructureSource.createLegend((Legend)oParent)) : (WrappedStructureSource.createSeriesDataPoint(se,dph));
  boolean bTransposed=bConsiderTranspostion && ((ChartWithAxes)getModel()).isTransposed();
  final Location panningOffset=this.getPanningOffset();
  PrimitiveRenderEvent preCopy=null;
  if (m == null || !m.isVisible()) {
    int iSize=5;
    if (m != null) {
      iSize=m.getSize();
    }
    if (lo instanceof Location3D) {
      final Oval3DRenderEvent ore=((EventObjectCache)ipr).getEventObject(oSource,Oval3DRenderEvent.class);
      Location3D lo3d=(Location3D)lo;
      ore.setLocation3D(new Location3D[]{goFactory.createLocation3D(lo3d.getX() - iSize,lo3d.getY() + iSize,lo3d.getZ()),goFactory.createLocation3D(lo3d.getX() - iSize,lo3d.getY() - iSize,lo3d.getZ()),goFactory.createLocation3D(lo3d.getX() + iSize,lo3d.getY() - iSize,lo3d.getZ()),goFactory.createLocation3D(lo3d.getX() + iSize,lo3d.getY() + iSize,lo3d.getZ())});
      preCopy=ore.copy();
    }
 else {
      final OvalRenderEvent ore=((EventObjectCache)ipr).getEventObject(oSource,OvalRenderEvent.class);
      ore.setBounds(goFactory.createBounds(lo.getX() - iSize,lo.getY() - iSize,iSize * 2,iSize * 2));
      preCopy=ore.copy();
    }
  }
 else   if (m.isVisible()) {
    final MarkerRenderer mr=new MarkerRenderer(this.getDevice(),oSource,lo,lia,m.getFill(),m,markerSize,this.getDeferredCache(),bDeferred,bTransposed);
    mr.draw(ipr);
    preCopy=mr.getRenderArea();
  }
  if (this.isInteractivityEnabled() && dph != null) {
    if (!(lo instanceof Location3D) || ((lo instanceof Location3D) && (this.get3DEngine().processEvent(preCopy,panningOffset.getX(),panningOffset.getY()) != null))) {
      final EList<Trigger> elTriggers=se.getTriggers();
      if (!elTriggers.isEmpty()) {
        final StructureSource iSource=(oParent instanceof Legend) ? (StructureSource.createSeries(se)) : (WrappedStructureSource.createSeriesDataPoint(se,dph));
        final InteractionEvent iev=((EventObjectCache)ipr).getEventObject(iSource,InteractionEvent.class);
        iev.setCursor(se.getCursor());
        Trigger tg;
        for (int t=0; t < elTriggers.size(); t++) {
          tg=goFactory.copyOf(elTriggers.get(t));
          this.processTrigger(tg,iSource);
          iev.addTrigger(tg);
        }
        iev.setHotSpot(preCopy);
        ipr.enableInteraction(iev);
      }
    }
  }
  ScriptHandler.callFunction(sh,ScriptHandler.AFTER_DRAW_MARKER,m,dph,getRunTimeContext().getScriptContext());
  getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.AFTER_DRAW_MARKER,m);
}