Program: 66711
Project: 66711
Buggy source:
/** 
 * @param idr
 * @param bo
 * @throws ChartException
 */
private final void render(IDeviceRenderer idr,Bounds bo,RadarSeries se,SeriesDefinition sd) throws ChartException {
  List<Series> rts=sd.getRunTimeSeries();
  int iThisSeriesIndex=rts.indexOf(se);
  if (iThisSeriesIndex == -1)   iThisSeriesIndex=getSeriesIndex();
  int totalSeriesCnt=getSeriesCount();
  int currSeriesIdx=getSeriesIndex();
  final EList<Fill> elPalette=sd.getSeriesPalette().getEntries();
  final AbstractScriptHandler<?> sh=getRunTimeContext().getScriptHandler();
  dc=getDeferredCache();
  Bounds boCA=goFactory.copyOf(bo);
  double dh=boCA.getHeight() - (boCA.getHeight() * percentReduce);
  double dl=boCA.getLeft() + (boCA.getWidth() * percentReduce) / 2;
  double dt=boCA.getTop() + (boCA.getHeight() * percentReduce) / 2;
  double dw=boCA.getWidth() - (boCA.getWidth() * percentReduce);
  double centrePointX=Math.round(dl + dw / 2);
  double centrePointY=Math.round(dt + dh / 2);
  double mag=dh / 2;
  Location cntpt=LocationImpl.create(centrePointX,centrePointY);
  if (currSeriesIdx == 1) {
    if (BULLSEYE_SUBTYPE_LITERAL.equals(getModel().getSubType())) {
      renderOvalBackgrounds(idr,cntpt,se,mag);
    }
  }
  PolarCoordinate pc=new PolarCoordinate(cntpt,dpha.length,getSeriesCount() - 1,getSeriesIndex() - 1);
  final boolean bPaletteByCategory=isPaletteByCategory();
  Fill fPaletteEntry=null;
  if (!bPaletteByCategory) {
    fPaletteEntry=FillUtil.getPaletteFill(elPalette,iThisSeriesIndex);
    updateTranslucency(fPaletteEntry,se);
  }
  Location loAxis=LocationImpl.create(centrePointX,centrePointY);
  List<Location> loList=new LinkedList<Location>();
  for (int index=0; index < dpha.length; index++) {
    DataPointHints dph=dpha[index];
    if (isNaN(dph.getOrthogonalValue())) {
      if (!se.isFillPolys()) {
        loList.add(null);
      }
      continue;
    }
    double currval=((Number)dph.getOrthogonalValue()).doubleValue();
    pc.computeLocation(loAxis,index,mag);
    Location lo=pc.createLocation(index,mag * (1 - ((getAxisMax() - currval) / (getAxisMax() - getAxisMin()))));
    loList.add(lo);
    if (bPaletteByCategory) {
      fPaletteEntry=FillUtil.getPaletteFill(elPalette,index);
      updateTranslucency(fPaletteEntry,se);
    }
    LineAttributes llia=se.getLineAttributes();
    if (se.isPaletteLineColor() && index == 0) {
      llia.setColor(goFactory.copyOf(FillUtil.getColor(fPaletteEntry)));
    }
    Marker m=se.getMarker();
    if (m != null) {
      ScriptHandler.callFunction(sh,ScriptHandler.BEFORE_DRAW_DATA_POINT,dph,fPaletteEntry,getRunTimeContext().getScriptContext());
      getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.BEFORE_DRAW_DATA_POINT,dph);
      renderMarker(se,idr,m,lo,llia,fPaletteEntry,dph,m.getSize(),true,false);
      ScriptHandler.callFunction(sh,ScriptHandler.AFTER_DRAW_DATA_POINT,dph,fPaletteEntry,getRunTimeContext().getScriptContext());
      getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.AFTER_DRAW_DATA_POINT,dph);
    }
    drawSeriesLabel(idr,pc,dph,lo);
  }
  renderPolys(idr,loList.toArray(new Location[loList.size()]),se,sd);
  if (currSeriesIdx == (totalSeriesCnt - 1)) {
    if (se.getWebLineAttributes() != null && se.getWebLineAttributes().isVisible()) {
      renderAxes(idr,pc,se,mag);
    }
    RadarSeries rsd=getFirstSeries();
    if (rsd.isShowWebLabels()) {
      Location loLabel=LocationImpl.create(0,0);
      for (int sc=0; sc <= scaleCount; sc++) {
        final TextRenderEvent stre=((EventObjectCache)idr).getEventObject(StructureSource.createSeries(se),TextRenderEvent.class);
        Label la=null;
        if (rsd.getWebLabel() != null) {
          la=goFactory.copyOf(rsd.getWebLabel());
        }
 else {
          la=goFactory.copyOf(rsd.getLabel());
        }
        la.setVisible(true);
        stre.setTextPosition(TextRenderEvent.RIGHT);
        double lblperc;
        if (sc == 0) {
          lblperc=getAxisMin();
        }
 else         if (sc == (scaleCount)) {
          lblperc=getAxisMax();
        }
 else {
          lblperc=(((double)sc / scaleCount) * (getAxisMax() - getAxisMin())) + getAxisMin();
        }
        String weblabel=ValueFormatter.format(lblperc,rsd.getWebLabelFormatSpecifier(),rtc.getULocale(),null);
        la.getCaption().setValue(weblabel);
        ScriptHandler.callFunction(sh,ScriptHandler.BEFORE_DRAW_AXIS_LABEL,SCRIPT_KEY_WEB,la,getRunTimeContext().getScriptContext());
        getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.BEFORE_DRAW_AXIS_LABEL,la);
        stre.setLabel(la);
        stre.setAction(TextRenderEvent.RENDER_TEXT_AT_LOCATION);
        double ycord=mag * sc / scaleCount;
        ycord=Math.round(centrePointY - ycord);
        double xcord=Math.round(centrePointX - (mag * 0.25));
        loLabel.set(xcord,ycord);
        stre.setLocation(loLabel);
        dc.addLabel(stre);
        ScriptHandler.callFunction(sh,ScriptHandler.AFTER_DRAW_AXIS_LABEL,SCRIPT_KEY_WEB,la,getRunTimeContext().getScriptContext());
        getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.AFTER_DRAW_AXIS_LABEL,la);
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * @param idr
 * @param bo
 * @throws ChartException
 */
private final void render(IDeviceRenderer idr,Bounds bo,RadarSeries se,SeriesDefinition sd) throws ChartException {
  List<Series> rts=sd.getRunTimeSeries();
  int iThisSeriesIndex=rts.indexOf(se);
  if (iThisSeriesIndex == -1)   iThisSeriesIndex=getSeriesIndex();
  int totalSeriesCnt=getSeriesCount();
  int currSeriesIdx=getSeriesIndex();
  final EList<Fill> elPalette=sd.getSeriesPalette().getEntries();
  final AbstractScriptHandler<?> sh=getRunTimeContext().getScriptHandler();
  dc=getDeferredCache();
  Bounds boCA=goFactory.copyOf(bo);
  double dh=boCA.getHeight() - (boCA.getHeight() * percentReduce);
  double dl=boCA.getLeft() + (boCA.getWidth() * percentReduce) / 2;
  double dt=boCA.getTop() + (boCA.getHeight() * percentReduce) / 2;
  double dw=boCA.getWidth() - (boCA.getWidth() * percentReduce);
  double centrePointX=Math.round(dl + dw / 2);
  double centrePointY=Math.round(dt + dh / 2);
  double mag=dh / 2;
  Location cntpt=LocationImpl.create(centrePointX,centrePointY);
  if (currSeriesIdx == 1) {
    if (BULLSEYE_SUBTYPE_LITERAL.equals(getModel().getSubType())) {
      renderOvalBackgrounds(idr,cntpt,se,mag);
    }
  }
  PolarCoordinate pc=new PolarCoordinate(cntpt,dpha.length,getSeriesCount() - 1,getSeriesIndex() - 1);
  final boolean bPaletteByCategory=isPaletteByCategory();
  Fill fPaletteEntry=null;
  if (!bPaletteByCategory) {
    fPaletteEntry=FillUtil.getPaletteFill(elPalette,iThisSeriesIndex);
    updateTranslucency(fPaletteEntry,se);
  }
  Location loAxis=LocationImpl.create(centrePointX,centrePointY);
  List<Location> loList=new LinkedList<Location>();
  for (int index=0; index < dpha.length; index++) {
    DataPointHints dph=dpha[index];
    if (isNaN(dph.getOrthogonalValue())) {
      if (!se.isFillPolys()) {
        loList.add(null);
      }
      continue;
    }
    double currval=((Number)dph.getOrthogonalValue()).doubleValue();
    pc.computeLocation(loAxis,index,mag);
    Location lo=pc.createLocation(index,mag * (1 - ((getAxisMax() - currval) / (getAxisMax() - getAxisMin()))));
    loList.add(lo);
    if (bPaletteByCategory) {
      fPaletteEntry=FillUtil.getPaletteFill(elPalette,index);
      updateTranslucency(fPaletteEntry,se);
    }
    LineAttributes llia=se.getLineAttributes();
    if (se.isPaletteLineColor() && index == 0) {
      llia.setColor(goFactory.copyOf(FillUtil.getColor(fPaletteEntry)));
    }
    Marker m=se.getMarker();
    if (m != null) {
      ScriptHandler.callFunction(sh,ScriptHandler.BEFORE_DRAW_DATA_POINT,dph,fPaletteEntry,getRunTimeContext().getScriptContext());
      getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.BEFORE_DRAW_DATA_POINT,dph);
      renderMarker(se,idr,m,lo,llia,fPaletteEntry,dph,m.getSize(),true,false);
      ScriptHandler.callFunction(sh,ScriptHandler.AFTER_DRAW_DATA_POINT,dph,fPaletteEntry,getRunTimeContext().getScriptContext());
      getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.AFTER_DRAW_DATA_POINT,dph);
    }
    drawSeriesLabel(idr,pc,dph,lo);
  }
  renderPolys(idr,loList.toArray(new Location[loList.size()]),se,sd);
  if (currSeriesIdx == (totalSeriesCnt - 1)) {
    if (se.getWebLineAttributes() != null && se.getWebLineAttributes().isVisible()) {
      renderAxes(idr,pc,mag);
    }
    RadarSeries rsd=getFirstSeries();
    if (rsd.isShowWebLabels()) {
      Location loLabel=LocationImpl.create(0,0);
      for (int sc=0; sc <= scaleCount; sc++) {
        final TextRenderEvent stre=((EventObjectCache)idr).getEventObject(StructureSource.createSeries(se),TextRenderEvent.class);
        Label la=null;
        if (rsd.getWebLabel() != null) {
          la=goFactory.copyOf(rsd.getWebLabel());
        }
 else {
          la=goFactory.copyOf(rsd.getLabel());
        }
        la.setVisible(true);
        stre.setTextPosition(TextRenderEvent.RIGHT);
        double lblperc;
        if (sc == 0) {
          lblperc=getAxisMin();
        }
 else         if (sc == (scaleCount)) {
          lblperc=getAxisMax();
        }
 else {
          lblperc=(((double)sc / scaleCount) * (getAxisMax() - getAxisMin())) + getAxisMin();
        }
        String weblabel=ValueFormatter.format(lblperc,rsd.getWebLabelFormatSpecifier(),rtc.getULocale(),null);
        la.getCaption().setValue(weblabel);
        ScriptHandler.callFunction(sh,ScriptHandler.BEFORE_DRAW_AXIS_LABEL,SCRIPT_KEY_WEB,la,getRunTimeContext().getScriptContext());
        getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.BEFORE_DRAW_AXIS_LABEL,la);
        stre.setLabel(la);
        stre.setAction(TextRenderEvent.RENDER_TEXT_AT_LOCATION);
        double ycord=mag * sc / scaleCount;
        ycord=Math.round(centrePointY - ycord);
        double xcord=Math.round(centrePointX - (mag * 0.25));
        loLabel.set(xcord,ycord);
        stre.setLocation(loLabel);
        dc.addLabel(stre);
        ScriptHandler.callFunction(sh,ScriptHandler.AFTER_DRAW_AXIS_LABEL,SCRIPT_KEY_WEB,la,getRunTimeContext().getScriptContext());
        getRunTimeContext().notifyStructureChange(IStructureDefinitionListener.AFTER_DRAW_AXIS_LABEL,la);
      }
    }
  }
}