Index: src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java
===================================================================
--- src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java	(revision 15058)
+++ src/org/openstreetmap/josm/data/validation/tests/SimilarNamedWays.java	(working copy)
@@ -244,7 +244,9 @@
             String part = "";
             for (int i = 0; i < words.length; i++) {
                 String word = words[i];
-                part = name.substring(start, start + word.length());
+                if (start + word.length() <= name.length()) {
+                    part = name.substring(start, start + word.length());
+                }
                 if (word.equalsIgnoreCase(part)) {
                     break;
                 }
Index: test/unit/org/openstreetmap/josm/data/validation/tests/SimilarNamedWaysTest.java
===================================================================
--- test/unit/org/openstreetmap/josm/data/validation/tests/SimilarNamedWaysTest.java	(revision 15058)
+++ test/unit/org/openstreetmap/josm/data/validation/tests/SimilarNamedWaysTest.java	(working copy)
@@ -129,4 +129,12 @@
         checkSimilarity("case only", "Rua Sao Joao", "Rua SAO JOAO", true);
         checkSimilarity("case only", "Rue éèçàïù", "Rue EeCAIU", true);
     }
+
+    /**
+     * Test names that previously caused a crash
+     */
+    @Test
+    public void testSimilarNamesRegression() {
+        assertFalse(test.similaryName("Milwaukee Brat House", "Who's On Third"));
+    }
 }
