diff options
author | Benoit Foucher <benoit@zeroc.com> | 2009-12-20 23:00:17 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2009-12-20 23:00:17 +0100 |
commit | 1bfce436ef24da5886a752f906628472ceb60a96 (patch) | |
tree | ae4fc9bac597df81b4855a0fadbde552c978bbbf /java | |
parent | edits to CHANGES & RELEASE_NOTES (diff) | |
download | ice-1bfce436ef24da5886a752f906628472ceb60a96.tar.bz2 ice-1bfce436ef24da5886a752f906628472ceb60a96.tar.xz ice-1bfce436ef24da5886a752f906628472ceb60a96.zip |
Fixed bug 4514 - Ice/facets test failure
Diffstat (limited to 'java')
-rw-r--r-- | java/demo/book/map_filesystem/DirectoryI.java | 2 | ||||
-rw-r--r-- | java/src/Ice/PropertiesI.java | 61 | ||||
-rw-r--r-- | java/src/IceUtilInternal/StringUtil.java | 66 | ||||
-rw-r--r-- | java/test/Ice/facets/AllTests.java | 2 | ||||
-rw-r--r-- | java/test/IceUtil/inputUtil/Client.java | 59 |
5 files changed, 128 insertions, 62 deletions
diff --git a/java/demo/book/map_filesystem/DirectoryI.java b/java/demo/book/map_filesystem/DirectoryI.java index 0c54e9faf0b..2d8c701f2c0 100644 --- a/java/demo/book/map_filesystem/DirectoryI.java +++ b/java/demo/book/map_filesystem/DirectoryI.java @@ -324,7 +324,7 @@ public class DirectoryI extends _DirectoryDisp { throw new Ice.ObjectNotExistException(); } - if(entry.parent.name.isEmpty()) + if(entry.parent.name.length() == 0) { throw new PermissionDenied("Cannot destroy root directory"); } diff --git a/java/src/Ice/PropertiesI.java b/java/src/Ice/PropertiesI.java index 70682ee2a50..fcdba281f71 100644 --- a/java/src/Ice/PropertiesI.java +++ b/java/src/Ice/PropertiesI.java @@ -106,7 +106,7 @@ public final class PropertiesI implements Properties { pv.used = true; - String[] result = splitString(pv.value, ", \t\r\n"); + String[] result = IceUtilInternal.StringUtil.splitString(pv.value, ", \t\r\n"); if(result == null) { Ice.Util.getProcessLogger().warning("mismatched quotes in property " + key @@ -715,64 +715,5 @@ public final class PropertiesI implements Properties _properties.put("Ice.Config", new PropertyValue(value, true)); } - // - // Split string helper; returns null for unmatched quotes - // - private String[] - splitString(String str, String delim) - { - java.util.List<String> l = new java.util.ArrayList<String>(); - char[] arr = new char[str.length()]; - int pos = 0; - - while(pos < str.length()) - { - int n = 0; - char quoteChar = '\0'; - if(str.charAt(pos) == '"' || str.charAt(pos) == '\'') - { - quoteChar = str.charAt(pos); - ++pos; - } - while(pos < str.length()) - { - if(quoteChar != '\0' && str.charAt(pos) == '\\' && pos + 1 < str.length() && - str.charAt(pos + 1) == quoteChar) - { - ++pos; - } - else if(quoteChar != '\0' && str.charAt(pos) == quoteChar) - { - ++pos; - quoteChar = '\0'; - break; - } - else if(delim.indexOf(str.charAt(pos)) != -1) - { - if(quoteChar == '\0') - { - ++pos; - break; - } - } - - if(pos < str.length()) - { - arr[n++] = str.charAt(pos++); - } - } - if(quoteChar != '\0') - { - return null; // Unmatched quote. - } - if(n > 0) - { - l.add(new String(arr, 0, n)); - } - } - - return (String[])l.toArray(new String[0]); - } - private java.util.HashMap<String, PropertyValue> _properties = new java.util.HashMap<String, PropertyValue>(); } diff --git a/java/src/IceUtilInternal/StringUtil.java b/java/src/IceUtilInternal/StringUtil.java index 137bb234e06..dfbb095673f 100644 --- a/java/src/IceUtilInternal/StringUtil.java +++ b/java/src/IceUtilInternal/StringUtil.java @@ -386,6 +386,72 @@ public final class StringUtil return s.toString(); } + // + // Split string helper; returns null for unmatched quotes + // + static public String[] + splitString(String str, String delim) + { + java.util.List<String> l = new java.util.ArrayList<String>(); + char[] arr = new char[str.length()]; + int pos = 0; + + int n = 0; + char quoteChar = '\0'; + while(pos < str.length()) + { + if(quoteChar == '\0' && (str.charAt(pos) == '"' || str.charAt(pos) == '\'')) + { + quoteChar = str.charAt(pos++); + continue; // Skip the quote. + } + else if(quoteChar == '\0' && str.charAt(pos) == '\\' && pos + 1 < str.length() && + (str.charAt(pos + 1) == '"' || str.charAt(pos + 1) == '\'')) + { + ++pos; // Skip the backslash + } + else if(quoteChar != '\0' && str.charAt(pos) == '\\' && pos + 1 < str.length() && + str.charAt(pos + 1) == quoteChar) + { + ++pos; // Skip the backslash + } + else if(quoteChar != '\0' && str.charAt(pos) == quoteChar) + { + ++pos; + quoteChar = '\0'; + continue; // Skip the quote. + } + else if(delim.indexOf(str.charAt(pos)) != -1) + { + if(quoteChar == '\0') + { + ++pos; + if(n > 0) + { + l.add(new String(arr, 0, n)); + n = 0; + } + continue; + } + } + + if(pos < str.length()) + { + arr[n++] = str.charAt(pos++); + } + } + + if(n > 0) + { + l.add(new String(arr, 0, n)); + } + if(quoteChar != '\0') + { + return null; // Unmatched quote. + } + return (String[])l.toArray(new String[0]); + } + public static int checkQuote(String s) { diff --git a/java/test/Ice/facets/AllTests.java b/java/test/Ice/facets/AllTests.java index 252a60f16dd..ea2e0971b9d 100644 --- a/java/test/Ice/facets/AllTests.java +++ b/java/test/Ice/facets/AllTests.java @@ -40,7 +40,7 @@ public class AllTests communicator.getProperties().setProperty("Ice.Admin.Facets", "foobar"); String[] facetFilter = communicator.getProperties().getPropertyAsList("Ice.Admin.Facets"); test(facetFilter.length == 1 && facetFilter[0].equals("foobar")); - communicator.getProperties().setProperty("Ice.Admin.Facets", "foo'bar"); + communicator.getProperties().setProperty("Ice.Admin.Facets", "foo\\'bar"); facetFilter = communicator.getProperties().getPropertyAsList("Ice.Admin.Facets"); test(facetFilter.length == 1 && facetFilter[0].equals("foo'bar")); communicator.getProperties().setProperty("Ice.Admin.Facets", "'foo bar' toto 'titi'"); diff --git a/java/test/IceUtil/inputUtil/Client.java b/java/test/IceUtil/inputUtil/Client.java index 24af63cda39..f8b4e64b0de 100644 --- a/java/test/IceUtil/inputUtil/Client.java +++ b/java/test/IceUtil/inputUtil/Client.java @@ -106,5 +106,64 @@ public class Client } System.out.println("ok"); + + System.out.print("checking string splitting... "); + System.out.flush(); + { + String[] arr; + + arr = IceUtilInternal.StringUtil.splitString("", ""); + test(arr.length == 0); + arr = IceUtilInternal.StringUtil.splitString("", ":"); + test(arr.length == 0); + arr = IceUtilInternal.StringUtil.splitString("a", ""); + test(arr.length == 1 && arr[0].equals("a")); + arr = IceUtilInternal.StringUtil.splitString("a", ":"); + test(arr.length == 1 && arr[0].equals("a")); + arr = IceUtilInternal.StringUtil.splitString("ab", ""); + test(arr.length == 1 && arr[0].equals("ab")); + arr = IceUtilInternal.StringUtil.splitString("ab:", ":"); + test(arr.length == 1 && arr[0].equals("ab")); + arr = IceUtilInternal.StringUtil.splitString(":ab", ":"); + test(arr.length == 1 && arr[0].equals("ab")); + arr = IceUtilInternal.StringUtil.splitString("a:b", ":"); + test(arr.length == 2 && arr[0].equals("a") && arr[1].equals("b")); + arr = IceUtilInternal.StringUtil.splitString(":a:b:", ":"); + test(arr.length == 2 && arr[0].equals("a") && arr[1].equals("b")); + + arr = IceUtilInternal.StringUtil.splitString("\"a\"", ":"); + test(arr.length == 1 && arr[0].equals("a")); + arr = IceUtilInternal.StringUtil.splitString("\"a\":b", ":"); + test(arr.length == 2 && arr[0].equals("a") && arr[1].equals("b")); + arr = IceUtilInternal.StringUtil.splitString("\"a\":\"b\"", ":"); + test(arr.length == 2 && arr[0].equals("a") && arr[1].equals("b")); + arr = IceUtilInternal.StringUtil.splitString("\"a:b\"", ":"); + test(arr.length == 1 && arr[0].equals("a:b")); + arr = IceUtilInternal.StringUtil.splitString("a=\"a:b\"", ":"); + test(arr.length == 1 && arr[0].equals("a=a:b")); + + arr = IceUtilInternal.StringUtil.splitString("'a'", ":"); + test(arr.length == 1 && arr[0].equals("a")); + arr = IceUtilInternal.StringUtil.splitString("'\"a'", ":"); + test(arr.length == 1 && arr[0].equals("\"a")); + arr = IceUtilInternal.StringUtil.splitString("\"'a\"", ":"); + test(arr.length == 1 && arr[0].equals("'a")); + + arr = IceUtilInternal.StringUtil.splitString("a\\'b", ":"); + test(arr.length == 1 && arr[0].equals("a'b")); + arr = IceUtilInternal.StringUtil.splitString("'a:b\\'c'", ":"); + test(arr.length == 1 && arr[0].equals("a:b'c")); + arr = IceUtilInternal.StringUtil.splitString("a\\\"b", ":"); + test(arr.length == 1 && arr[0].equals("a\"b")); + arr = IceUtilInternal.StringUtil.splitString("\"a:b\\\"c\"", ":"); + test(arr.length == 1 && arr[0].equals("a:b\"c")); + arr = IceUtilInternal.StringUtil.splitString("'a:b\"c'", ":"); + test(arr.length == 1 && arr[0].equals("a:b\"c")); + arr = IceUtilInternal.StringUtil.splitString("\"a:b'c\"", ":"); + test(arr.length == 1 && arr[0].equals("a:b'c")); + + test(IceUtilInternal.StringUtil.splitString("a\"b", ":") == null); + } + System.out.println("ok"); } } |