diff --git a/aQute.libg/src/aQute/lib/io/Windows.java b/aQute.libg/src/aQute/lib/io/Windows.java index 30bc7a900d..c74c480f7f 100644 --- a/aQute.libg/src/aQute/lib/io/Windows.java +++ b/aQute.libg/src/aQute/lib/io/Windows.java @@ -10,7 +10,7 @@ class Windows implements OS { final static Pattern WINDOWS_BAD_FILE_NAME_P = Pattern.compile( - "(?:(:?.*[\u0000-\u001F<>:\"|/\\\\?*].*)|..|CON|PRN|AUX|NUL|COM\\d|COM¹|COM²|COM³|LPT\\d|LPT¹|LPT²|LPT³)(?:\\.\\w+)?", + "(?:(:?.*[\u0000-\u001F<>:\"|/\\\\?*].*)|\\.\\.|CON|PRN|AUX|NUL|COM\\d|COM¹|COM²|COM³|LPT\\d|LPT¹|LPT²|LPT³)(?:\\.\\w+)?", Pattern.CASE_INSENSITIVE); @Override diff --git a/aQute.libg/test/aQute/lib/io/IOTest.java b/aQute.libg/test/aQute/lib/io/IOTest.java index 5e56fde7c4..b6a5cae9af 100644 --- a/aQute.libg/test/aQute/lib/io/IOTest.java +++ b/aQute.libg/test/aQute/lib/io/IOTest.java @@ -561,6 +561,8 @@ public void testGetBasedFile() throws IOException { assertThat(new File(base, "")).isEqualTo(base); assertThat(new File(base, "./").getParentFile()).isEqualTo(base); assertThat(new File(base, "/bar").getParentFile()).isEqualTo(base); + assertThat(IO.getBasedFile(base, "META-INF/versions/11/OSGI-INF/MANIFEST.MF") + .getName()).isEqualTo("MANIFEST.MF"); assertThat(IO.getBasedFile(base, "")).isEqualTo(base); assertThat(IO.getBasedFile(base, "foo/../bar")).isEqualTo(new File(base, "bar")); assertThat(IO.getBasedFile(base, ".💩.")).isEqualTo(new File(base, ".💩.")); @@ -578,6 +580,8 @@ public void testCoder() { public void testWindows() throws IOException { Windows os = new Windows(); File base = new File("base").getAbsoluteFile(); + assertThat(os.getBasedFile(base, "META-INF/versions/11/OSGI-INF/MANIFEST.MF") + .getName()).isEqualTo("MANIFEST.MF"); assertThat(except(() -> os.getBasedFile(base, "bar/LPT1"))).contains("io.win.sub.invalid"); assertThat(except(() -> os.getBasedFile(base, "bar/ os.getBasedFile(base, "bar/>bla/foo"))).contains("io.win.sub.invalid");