Index: /trunk/src/org/openstreetmap/josm/io/OsmReader.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 12086)
+++ /trunk/src/org/openstreetmap/josm/io/OsmReader.java	(revision 12087)
@@ -218,8 +218,14 @@
         String lat = parser.getAttributeValue(null, "lat");
         String lon = parser.getAttributeValue(null, "lon");
+        LatLon ll = null;
         if (lat != null && lon != null) {
-            nd.setCoor(new LatLon(Double.parseDouble(lat), Double.parseDouble(lon)));
+            ll = new LatLon(Double.parseDouble(lat), Double.parseDouble(lon));
+            nd.setCoor(ll);
         }
         readCommon(nd);
+        if (ll != null && !ll.isValid()) {
+            throwException(tr("Illegal value for attributes ''lat'', ''lon'' on node with ID {0}. Got ''{1}'', ''{2}''.",
+                    Long.toString(nd.getId()), lat, lon));
+        }
         Node n = new Node(nd.getId(), nd.getVersion());
         n.setVisible(nd.isVisible());
Index: /trunk/test/data/regress/14754/malformed_for_14754.osm
===================================================================
--- /trunk/test/data/regress/14754/malformed_for_14754.osm	(revision 12087)
+++ /trunk/test/data/regress/14754/malformed_for_14754.osm	(revision 12087)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<osm version='0.6' upload='never' generator='JOSM'>
+  <bounds minlat='55.3310119' minlon='10.493499' maxlat='55.3313171' maxlon='10.4944539' origin='CGImap 0.6.0 (14790 thorn-01.openstreetmap.org)' />
+  <node id='1425145996' timestamp='2011-09-06T13:32:55Z' uid='445576' user='Krægpøth' version='1' changeset='9227321' lat='55.3295347' lon='10.494432' />
+  <node id='1425146006' action='modify' timestamp='2011-09-06T13:32:55Z' uid='445576' user='Krægpøth' version='1' changeset='9227321' lat='550.3311950157' lon='10.49428298298' />
+  <node id='1432736611' timestamp='2015-07-09T09:57:07Z' uid='207581' user='Hjart' version='2' changeset='32514866' lat='55.3365712' lon='10.5010424' />
+</osm>
Index: /trunk/test/unit/org/openstreetmap/josm/io/OsmReaderTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/io/OsmReaderTest.java	(revision 12086)
+++ /trunk/test/unit/org/openstreetmap/josm/io/OsmReaderTest.java	(revision 12087)
@@ -5,4 +5,5 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.InputStream;
@@ -31,3 +32,19 @@
         }
     }
+
+    /**
+     * Non-regression test for <a href="https://josm.openstreetmap.de/ticket/14754">Bug #14754</a>.
+     * @throws Exception if any error occurs
+     */
+    @Test
+    public void testTicket14754() throws Exception {
+        try (InputStream in = TestUtils.getRegressionDataStream(14754, "malformed_for_14754.osm")) {
+            OsmReader.parseDataSet(in, NullProgressMonitor.INSTANCE);
+            fail("should throw exception");
+        } catch (IllegalDataException e) {
+            assertEquals("Illegal value for attributes 'lat', 'lon' on node with ID 1425146006." +
+                    " Got '550.3311950157', '10.49428298298'." +
+                    " (at line 5, column 179). 578 bytes have been read", e.getMessage());
+        }
+    }
 }
