Ticket #17746: 17746.patch

File 17746.patch, 1.6 KB (added by GerdP, 5 years ago)

use trick to trigger parser exception

  • src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java

     
    3636import org.openstreetmap.josm.data.osm.search.PushbackTokenizer.Token;
    3737import org.openstreetmap.josm.data.projection.ProjectionRegistry;
    3838import org.openstreetmap.josm.gui.mappaint.Environment;
     39import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSRule.Declaration;
    3940import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
    4041import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
    4142import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
     
    19951996
    19961997    static Match compileMapCSS(String mapCSS) throws SearchParseError {
    19971998        try {
    1998             final List<Selector> selectors = new MapCSSParser(new StringReader(mapCSS)).selectors();
     1999            // see #17746: detect invalid selector by adding test declaring
     2000            MapCSSParser parser = new MapCSSParser(new StringReader(mapCSS + "{set test;}"));
     2001            final List<Selector> selectors = parser.selectors();
     2002            Declaration decl = parser.declaration();
     2003            if (decl.instructions.size() != 1 || !"test: true;".equals(decl.instructions.iterator().next().toString())) {
     2004                throw new SearchParseError(tr("Failed to parse MapCSS selector"));
     2005            }
     2006
    19992007            return new Match() {
    20002008                @Override
    20012009                public boolean match(OsmPrimitive osm) {