Index: src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java
===================================================================
--- src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java	(revision 15105)
+++ src/org/openstreetmap/josm/data/osm/search/SearchCompiler.java	(working copy)
@@ -36,6 +36,7 @@
 import org.openstreetmap.josm.data.osm.search.PushbackTokenizer.Token;
 import org.openstreetmap.josm.data.projection.ProjectionRegistry;
 import org.openstreetmap.josm.gui.mappaint.Environment;
+import org.openstreetmap.josm.gui.mappaint.mapcss.MapCSSRule.Declaration;
 import org.openstreetmap.josm.gui.mappaint.mapcss.Selector;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.MapCSSParser;
 import org.openstreetmap.josm.gui.mappaint.mapcss.parsergen.ParseException;
@@ -1995,7 +1996,14 @@
 
     static Match compileMapCSS(String mapCSS) throws SearchParseError {
         try {
-            final List<Selector> selectors = new MapCSSParser(new StringReader(mapCSS)).selectors();
+            // see #17746: detect invalid selector by adding test declaring
+            MapCSSParser parser = new MapCSSParser(new StringReader(mapCSS + "{set test;}"));
+            final List<Selector> selectors = parser.selectors();
+            Declaration decl = parser.declaration();
+            if (decl.instructions.size() != 1 || !"test: true;".equals(decl.instructions.iterator().next().toString())) {
+                throw new SearchParseError(tr("Failed to parse MapCSS selector"));
+            }
+
             return new Match() {
                 @Override
                 public boolean match(OsmPrimitive osm) {
