Index: trunk/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java	(revision 14813)
+++ trunk/src/org/openstreetmap/josm/gui/layer/imagery/ReprojectionTile.java	(revision 14816)
@@ -18,4 +18,5 @@
 import org.openstreetmap.josm.tools.ImageWarp;
 import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.tools.bugreport.BugReport;
 
 /**
@@ -166,12 +167,16 @@
             transform = pointTransform;
         }
-        BufferedImage imageOut = ImageWarp.warp(
-                imageIn, getDimension(pbTargetAligned, scale),
-                transform, interpolation);
-        synchronized (this) {
-            this.image = imageOut;
-            this.anchor = new TileAnchor(p00Img, p11Img);
-            this.nativeScale = scale;
-            this.maxZoomReached = scaleFix != null;
+        Dimension targetDim = getDimension(pbTargetAligned, scale);
+        try {
+            BufferedImage imageOut = ImageWarp.warp(imageIn, targetDim, transform, interpolation);
+            synchronized (this) {
+                this.image = imageOut;
+                this.anchor = new TileAnchor(p00Img, p11Img);
+                this.nativeScale = scale;
+                this.maxZoomReached = scaleFix != null;
+            }
+        } catch (NegativeArraySizeException e) {
+            // See #17387 - https://bugs.openjdk.java.net/browse/JDK-4690476
+            throw BugReport.intercept(e).put("targetDim", targetDim);
         }
     }
Index: trunk/src/org/openstreetmap/josm/tools/ImageWarp.java
===================================================================
--- trunk/src/org/openstreetmap/josm/tools/ImageWarp.java	(revision 14813)
+++ trunk/src/org/openstreetmap/josm/tools/ImageWarp.java	(revision 14816)
@@ -9,4 +9,5 @@
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 
@@ -181,5 +182,5 @@
                             break;
                         default:
-                            throw new AssertionError();
+                            throw new AssertionError(Objects.toString(interpolation));
                     }
                     imgTarget.setRGB(i, j, rgba);
