From 2695843156dee93c52734e4fd4948498ea8c2b19 Mon Sep 17 00:00:00 2001 From: Taylor Smock Date: Tue, 12 Jul 2022 06:57:41 -0600 Subject: [PATCH 1/2] Fix #22209: NPE in DataSetChangesetBuilder#mergeBounds This is caused when the latlon of the node is not known, and so Node#getCoor returned a `null` value. This patch fixes that by (a) using `isLatLonKnown` to ensure that the node does have a valid lat/lon, and by not using the Node#getCoor call (this also avoids an unnecessary allocation). Signed-off-by: Taylor Smock --- .../changeset/util/DataSetChangesetBuilder.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/org/openstreetmap/josm/plugins/changeset/util/DataSetChangesetBuilder.java b/src/org/openstreetmap/josm/plugins/changeset/util/DataSetChangesetBuilder.java index 43dfe91..5e3c6d9 100644 --- a/src/org/openstreetmap/josm/plugins/changeset/util/DataSetChangesetBuilder.java +++ b/src/org/openstreetmap/josm/plugins/changeset/util/DataSetChangesetBuilder.java @@ -16,6 +16,7 @@ import javax.json.JsonValue; import org.openstreetmap.josm.data.Bounds; +import org.openstreetmap.josm.data.coor.ILatLon; import org.openstreetmap.josm.data.coor.LatLon; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.Node; @@ -164,18 +165,19 @@ private Map getTags(final JsonObject tags, final String action) return mapTags; } - private Bounds mergeBounds(final Bounds bounds, final OsmPrimitive osmPrimitive) { - if (osmPrimitive instanceof Node) { // ways and relations consist of nodes that are already in the dataset - return mergeBounds(bounds, ((Node) osmPrimitive).getCoor()); + private static Bounds mergeBounds(final Bounds bounds, final OsmPrimitive osmPrimitive) { + // ways and relations consist of nodes that are already in the dataset + if (osmPrimitive instanceof Node && ((Node) osmPrimitive).isLatLonKnown()) { + return mergeBounds(bounds, ((ILatLon) osmPrimitive)); } return bounds; } - private Bounds mergeBounds(final Bounds bounds, final LatLon coords) { + private static Bounds mergeBounds(final Bounds bounds, final ILatLon coords) { if (bounds == null) { - return new Bounds(coords); + return new Bounds(coords.lat(), coords.lon(), coords.lat(), coords.lon()); } else { - bounds.extend(coords); + bounds.extend(coords.lat(), coords.lon()); return bounds; } } From cf0ba20557c06f22a5ac249b9b6d9d4b57d55abe Mon Sep 17 00:00:00 2001 From: Taylor Smock Date: Tue, 12 Jul 2022 07:04:13 -0600 Subject: [PATCH 2/2] ChangesetLayer: Avoid getCoor calls Signed-off-by: Taylor Smock --- .../josm/plugins/changeset/ChangesetLayer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/org/openstreetmap/josm/plugins/changeset/ChangesetLayer.java b/src/org/openstreetmap/josm/plugins/changeset/ChangesetLayer.java index 551c109..b376693 100644 --- a/src/org/openstreetmap/josm/plugins/changeset/ChangesetLayer.java +++ b/src/org/openstreetmap/josm/plugins/changeset/ChangesetLayer.java @@ -115,8 +115,8 @@ public void paint(Graphics2D g, final MapView mv, Bounds bounds) { for (int i = 0; i <= way.getNodes().size() - 2; i++) { Node node1 = way.getNode(i); Node node2 = way.getNode(i + 1); - Point pnt1 = mv.getPoint(node1.getCoor()); - Point pnt2 = mv.getPoint(node2.getCoor()); + Point pnt1 = mv.getPoint(node1); + Point pnt2 = mv.getPoint(node2); g.draw(new Line2D.Double(pnt1.x, pnt1.y, pnt2.x, pnt2.y)); } } else if (primitive instanceof Node) { @@ -132,7 +132,7 @@ public void paint(Graphics2D g, final MapView mv, Bounds bounds) { g.setColor(new Color(229, 228, 61)); } - Point pnt = mv.getPoint(node.getCoor()); + Point pnt = mv.getPoint(node); g.fillOval(pnt.x, pnt.y, 7, 7); } }