diff --git a/lib/OpenLayers/Renderer/Canvas.js b/lib/OpenLayers/Renderer/Canvas.js index a934363ec7..d9e7828469 100644 --- a/lib/OpenLayers/Renderer/Canvas.js +++ b/lib/OpenLayers/Renderer/Canvas.js @@ -140,8 +140,9 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, { if (feature.geometry) { style = this.applyDefaultSymbolizer(style || feature.style); // don't render if display none or feature outside extent - rendered = (style.display !== "none") && - feature.geometry.getBounds().intersectsBounds(this.extent); + var bounds = feature.geometry.getBounds(); + rendered = (style.display !== "none") && !!bounds && + bounds.intersectsBounds(this.extent); if (rendered) { // keep track of what we have rendered for redraw this.features[feature.id] = [feature, style]; diff --git a/tests/Renderer/Canvas.html b/tests/Renderer/Canvas.html index d32c0b942b..c4bef1259a 100644 --- a/tests/Renderer/Canvas.html +++ b/tests/Renderer/Canvas.html @@ -123,7 +123,7 @@ return; } - t.plan(8); + t.plan(10); var layer = new OpenLayers.Layer.Vector(null, { isBaseLayer: true, renderers: ["Canvas"] @@ -183,6 +183,15 @@ t.eq(count, 1, "d) redraw is called when drawing a feature outside renderer extent"); renderer.clear(); + // e) draw a polygon feature without bounds + count = 0; + exp = renderer.drawFeature( + new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Polygon()), {} + ); + t.eq(exp, false, "d) drawFeature returns false"); + t.eq(count, 1, "d) redraw is called when drawing a feature without bounds"); + renderer.clear(); + map.destroy(); }