4858457: File.getCanonicalPath() throws IOException when invoked with "nul" (win)
Reviewed-by: alanb
This commit is contained in:
parent
05ecc7021a
commit
bcc5da3b77
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -179,6 +179,10 @@ static int
|
|||||||
wdots(WCHAR *start)
|
wdots(WCHAR *start)
|
||||||
{
|
{
|
||||||
WCHAR *p = start;
|
WCHAR *p = start;
|
||||||
|
// Skip "\\.\" prefix
|
||||||
|
if (wcslen(p) > 4 && !wcsncmp(p, L"\\\\.\\", 4))
|
||||||
|
p = p + 4;
|
||||||
|
|
||||||
while (*p) {
|
while (*p) {
|
||||||
if ((p = wcschr(p, L'.')) == NULL) // find next occurence of '.'
|
if ((p = wcschr(p, L'.')) == NULL) // find next occurence of '.'
|
||||||
return 0; // no more dots
|
return 0; // no more dots
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -22,11 +22,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* @test
|
/* @test
|
||||||
@bug 6176051
|
@bug 6176051 4858457
|
||||||
@summary Check isFile's handling of Windows device names
|
@summary Check whether reserved names are handled correctly on Windows
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
public class WinDeviceName {
|
public class WinDeviceName {
|
||||||
private static String devnames[] = {
|
private static String devnames[] = {
|
||||||
@ -35,22 +36,38 @@ public class WinDeviceName {
|
|||||||
"LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9",
|
"LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9",
|
||||||
"CLOCK$"
|
"CLOCK$"
|
||||||
};
|
};
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) {
|
||||||
String osName = System.getProperty("os.name");
|
String osName = System.getProperty("os.name");
|
||||||
if (!osName.startsWith("Windows")) {
|
if (!osName.startsWith("Windows")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < devnames.length; i++) {
|
for (int i = 0; i < devnames.length; i++) {
|
||||||
if (new File(devnames[i]).isFile() ||
|
String names[] = { devnames[i], devnames[i] + ".TXT",
|
||||||
new File(devnames[i] + ".txt").isFile()) {
|
devnames[i].toLowerCase(),
|
||||||
if ("CLOCK$".equals(devnames[i]) &&
|
devnames[i].toLowerCase() + ".txt" };
|
||||||
(osName.startsWith("Windows 9") ||
|
|
||||||
osName.startsWith("Windows Me"))) {
|
for (String name : names) {
|
||||||
//"CLOCK$" is a reserved device name for NT
|
File f = new File(name);
|
||||||
continue;
|
if (f.isFile()) {
|
||||||
|
if ("CLOCK$".equals(devnames[i]) &&
|
||||||
|
(osName.startsWith("Windows 9") ||
|
||||||
|
osName.startsWith("Windows Me"))) {
|
||||||
|
//"CLOCK$" is a reserved device name for NT
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
throw new RuntimeException("isFile() returns true for " +
|
||||||
|
"Device name " + devnames[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!"CLOCK$".equals(devnames[i])) {
|
||||||
|
try {
|
||||||
|
System.out.println((new File(name)).getCanonicalPath());
|
||||||
|
} catch(IOException ie) {
|
||||||
|
throw new RuntimeException("Fail to get canonical " +
|
||||||
|
"path for " + name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
throw new Exception("isFile() returns true for Device name "
|
|
||||||
+ devnames[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user