Index: /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 18875)
+++ /trunk/src/org/openstreetmap/josm/gui/mappaint/mapcss/Functions.java	(revision 18876)
@@ -629,5 +629,5 @@
      */
     public static boolean has_tag_key(final Environment env, String key) {
-        return env.osm != null ? env.osm.hasKey(key) : false;
+        return env.osm != null && env.osm.hasKey(key);
     }
 
@@ -852,4 +852,7 @@
      */
     public static Boolean JOSM_search(final Environment env, String searchStr) {
+        if (env.osm == null) {
+            return null;
+        }
         Match m;
         try {
Index: /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java	(revision 18875)
+++ /trunk/test/unit/org/openstreetmap/josm/gui/mappaint/mapcss/FunctionsTest.java	(revision 18876)
@@ -260,4 +260,5 @@
     /**
      * Non-regression test for #23238: NPE when env.osm is null
+     * @see #testNonRegression23238JOSMSearch()
      */
     @ParameterizedTest
@@ -288,3 +289,13 @@
         }
     }
+
+    /**
+     * Non-regression test for #23238: NPE when env.osm is null and {@link Functions#JOSM_search(Environment, String)}
+     * has a non-empty search string.
+     * @see #testNonRegression23238(Method)
+     */
+    @Test
+    void testNonRegression23238JOSMSearch() {
+        assertDoesNotThrow(() -> Functions.JOSM_search(new Environment(), "foobar"));
+    }
 }
