Index: trunk/src/org/openstreetmap/josm/data/projection/proj/AbstractProj.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/projection/proj/AbstractProj.java	(revision 18352)
+++ trunk/src/org/openstreetmap/josm/data/projection/proj/AbstractProj.java	(revision 18353)
@@ -5,4 +5,5 @@
 import org.openstreetmap.josm.data.projection.ProjectionConfigurationException;
 import org.openstreetmap.josm.tools.CheckParameterUtil;
+import org.openstreetmap.josm.tools.Logging;
 
 /**
@@ -170,4 +171,8 @@
     // Iteratively solve equation (7-9) from Snyder.
     final double cphi2(final double ts) {
+        if (Double.isNaN(ts)) {
+            Logging.warn("Trying to project invalid NaN coordinates");
+            return Double.NaN;
+        }
         final double eccnth = 0.5 * e;
         double phi = (Math.PI/2) - 2.0 * Math.atan(ts);
Index: trunk/test/unit/org/openstreetmap/josm/data/projection/proj/AbstractProjTest.java
===================================================================
--- trunk/test/unit/org/openstreetmap/josm/data/projection/proj/AbstractProjTest.java	(revision 18353)
+++ trunk/test/unit/org/openstreetmap/josm/data/projection/proj/AbstractProjTest.java	(revision 18353)
@@ -0,0 +1,45 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.data.projection.proj;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+import org.openstreetmap.josm.data.Bounds;
+
+/**
+ * Unit tests of {@link AbstractProj}
+ */
+class AbstractProjTest {
+
+    private final AbstractProj proj = new AbstractProj() {
+
+        @Override
+        public String getName() {
+            return null;
+        }
+
+        @Override
+        public String getProj4Id() {
+            return null;
+        }
+
+        @Override
+        public double[] project(double latRad, double lonRad) {
+            return null;
+        }
+
+        @Override
+        public double[] invproject(double east, double north) {
+            return null;
+        }
+
+        @Override
+        public Bounds getAlgorithmBounds() {
+            return null;
+        }};
+
+    @Test
+    void testCphi2NaN() {
+        assertTrue(Double.isNaN(proj.cphi2(Double.NaN)));
+    }
+}
