From: <svn...@os...> - 2012-03-19 20:22:55
|
Author: aaime Date: 2012-03-19 13:22:48 -0700 (Mon, 19 Mar 2012) New Revision: 38638 Modified: trunk/modules/library/render/src/main/java/org/geotools/renderer/style/SLDStyleFactory.java trunk/modules/library/render/src/test/java/org/geotools/renderer/style/SLDStyleFactoryTest.java Log: [GEOT-4085] SLDStyleFactory will loop indefinitely trying to transform external graphics without a format Modified: trunk/modules/library/render/src/main/java/org/geotools/renderer/style/SLDStyleFactory.java =================================================================== --- trunk/modules/library/render/src/main/java/org/geotools/renderer/style/SLDStyleFactory.java 2012-03-19 16:19:55 UTC (rev 38637) +++ trunk/modules/library/render/src/main/java/org/geotools/renderer/style/SLDStyleFactory.java 2012-03-19 20:22:48 UTC (rev 38638) @@ -1219,10 +1219,14 @@ Iterator<ExternalGraphicFactory> it = DynamicSymbolFactoryFinder .getExternalGraphicFactories(); while (it.hasNext()) { + ExternalGraphicFactory egf = it.next(); try { - Expression formatExpression = ExpressionExtractor.extractCqlExpressions(eg.getFormat()); - String format = formatExpression.evaluate(feature, String.class); - Icon icon = it.next().getIcon((Feature) feature, location, format, toImageSize(size)); + String format = null; + if(eg.getFormat() != null) { + Expression formatExpression = ExpressionExtractor.extractCqlExpressions(eg.getFormat()); + format = formatExpression.evaluate(feature, String.class); + } + Icon icon = egf.getIcon((Feature) feature, location, format, toImageSize(size)); if (icon != null) { return icon; } Modified: trunk/modules/library/render/src/test/java/org/geotools/renderer/style/SLDStyleFactoryTest.java =================================================================== --- trunk/modules/library/render/src/test/java/org/geotools/renderer/style/SLDStyleFactoryTest.java 2012-03-19 16:19:55 UTC (rev 38637) +++ trunk/modules/library/render/src/test/java/org/geotools/renderer/style/SLDStyleFactoryTest.java 2012-03-19 20:22:48 UTC (rev 38638) @@ -358,4 +358,14 @@ ms = (MarkStyle2D) sld.createPointStyle(feature, symb, range); assertTrue(MarkStyle2D.isMaxMarkSizeEnabled()); } + + + public void testInfiniteLoopAvoidance() throws Exception { + PointSymbolizer symb = sf.createPointSymbolizer(); + ExternalGraphic eg = sf.createExternalGraphic("http://foo.com/invalid_or_missing_image_url", null); + symb.getGraphic().graphicalSymbols().add(eg); + + IconStyle2D icon = (IconStyle2D) sld.createPointStyle(feature, symb, range); + assertNull(icon); + } } |