Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Chen2012-02-15 08:20:47 +0000
committerWilliam Chen2012-02-15 08:20:47 +0000
commit09a5ff0d3bffa57e43d19431aafb382dc0954624 (patch)
treed1dac6cb5899a71c1197644480c822cdc3354970 /target_explorer
parentf9d285c732e33613005891ad5e0d11ba08e3190d (diff)
downloadorg.eclipse.tcf-09a5ff0d3bffa57e43d19431aafb382dc0954624.tar.gz
org.eclipse.tcf-09a5ff0d3bffa57e43d19431aafb382dc0954624.tar.xz
org.eclipse.tcf-09a5ff0d3bffa57e43d19431aafb382dc0954624.zip
Target Explorer: Check if the path contains an illegal character on
Windows.
Diffstat (limited to 'target_explorer')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/url/TcfURLStreamHandlerService.java36
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.java2
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.properties2
3 files changed, 35 insertions, 5 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/url/TcfURLStreamHandlerService.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/url/TcfURLStreamHandlerService.java
index bb32760d7..571b2d42a 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/url/TcfURLStreamHandlerService.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/internal/url/TcfURLStreamHandlerService.java
@@ -4,12 +4,14 @@ import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
+import org.eclipse.osgi.util.NLS;
import org.eclipse.tcf.te.tcf.filesystem.nls.Messages;
import org.osgi.service.url.AbstractURLStreamHandlerService;
public class TcfURLStreamHandlerService extends AbstractURLStreamHandlerService {
// The pattern of a windows path.
- private static final String WIN_PATH_PATTERN = "[A-Za-z]:.*"; //$NON-NLS-1$
+ private static final String WINPATH_PATTERN = "[A-Za-z]:.*"; //$NON-NLS-1$
+ private static final char[] WINPATH_FORBIDDEN_CHARS = {':', '*', '?', '"', '<', '>', '|' };
/*
* (non-Javadoc)
@@ -31,7 +33,8 @@ public class TcfURLStreamHandlerService extends AbstractURLStreamHandlerService
* WIN_PATH = <strong>DISK_SEG</strong> / (<strong>RELATIVE_PATH</strong>)?
* DISK_SEG = [a-zA-Z]:
* RELATIVE_PATH = <strong>PATH_SEG</strong> | <strong>PATH_SEG</strong>/<strong>RELATIVE_PATH</strong>
- * PATH_SEG = (.^[/])+
+ * Unix/Linux PATH_SEG = (.^[/])+
+ * Windows PATH_SEG = (.^[\/:*?"<>|])+
* </pre>
*/
@Override
@@ -47,8 +50,15 @@ public class TcfURLStreamHandlerService extends AbstractURLStreamHandlerService
start = end + 1;
String path = spec.substring(start);
if (path.length() > 0) {
- if (!path.matches(WIN_PATH_PATTERN)) {
- path = "/" + path; //$NON-NLS-1$
+ if (path.matches(WINPATH_PATTERN)) {
+ String pathext = path.substring(2); // Cut the path after ':'.
+ if(pathext.length() == 0)
+ throw new IllegalArgumentException(Messages.TcfURLStreamHandlerService_OnlyDiskPartError);
+ pathext = pathext.substring(1); // Cut the path after the disk part.
+ checkWinPath(pathext);
+ }
+ else {
+ path = "/" + path; //$NON-NLS-1$
}
}
else {
@@ -57,6 +67,22 @@ public class TcfURLStreamHandlerService extends AbstractURLStreamHandlerService
setURL(u, TcfURLConnection.PROTOCOL_SCHEMA, peerId, -1, null, null, path, null, null);
}
+ /**
+ * Check the format of the specified windows path.
+ *
+ * @param path The relative path to a disk part.
+ */
+ private void checkWinPath(String path) {
+ for (int i = 0; i < path.length(); i++) {
+ char c = path.charAt(i);
+ for(int j=0;j<WINPATH_FORBIDDEN_CHARS.length;j++) {
+ if(c==WINPATH_FORBIDDEN_CHARS[j]) {
+ throw new IllegalArgumentException(NLS.bind(Messages.TcfURLStreamHandlerService_IllegalCharacter, "'"+c+"'")); //$NON-NLS-1$//$NON-NLS-2$
+ }
+ }
+ }
+ }
+
/*
* (non-Javadoc)
* @see org.osgi.service.url.AbstractURLStreamHandlerService#toExternalForm(java.net.URL)
@@ -73,7 +99,7 @@ public class TcfURLStreamHandlerService extends AbstractURLStreamHandlerService
builder.append("/"); //$NON-NLS-1$
} else if(path.length() == 0) {
builder.append("/"); //$NON-NLS-1$
- } else if(path.matches(WIN_PATH_PATTERN)) {
+ } else if(path.matches(WINPATH_PATTERN)) {
builder.append("/"); //$NON-NLS-1$
builder.append(path);
} else {
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.java
index b55865d24..edbf1c92d 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.java
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.java
@@ -300,6 +300,8 @@ public class Messages extends NLS {
public static String TcfURLConnection_OpenFileTimeout;
public static String TcfURLConnection_OpenTCFChannelTimeout;
public static String TcfURLStreamHandlerService_ErrorURLFormat;
+ public static String TcfURLStreamHandlerService_IllegalCharacter;
+ public static String TcfURLStreamHandlerService_OnlyDiskPartError;
public static String OpeningChannelFailureMessage;
public static String OpeningChannelFailureTitle;
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.properties b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.properties
index 89256ab82..3bfde6a67 100644
--- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.properties
+++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.filesystem/src/org/eclipse/tcf/te/tcf/filesystem/nls/Messages.properties
@@ -223,6 +223,8 @@ TcfURLConnection_NoSuchTcfAgent=TCF agent is already disconnected\!
TcfURLConnection_OpenFileTimeout=Opening file has timed out\!
TcfURLConnection_OpenTCFChannelTimeout=Opening TCF channel has timed out\!
TcfURLStreamHandlerService_ErrorURLFormat=Error TCF URL format\!
+TcfURLStreamHandlerService_IllegalCharacter=A Windows path does not permit character {0}.
+TcfURLStreamHandlerService_OnlyDiskPartError=A Windows path should not contain only disk part.
OpeningChannelFailureMessage=We cannot open a TCF channel to the target: {0}. It is caused by {1}.
OpeningChannelFailureTitle=Opening Channel

Back to the top