Procházet zdrojové kódy

ZOOKEEPER-1025: zkCli is overly sensitive to to spaces. (Laxman via camille)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1159389 13f79535-47bb-0310-9956-ffa450edef68
Camille Fournier před 13 roky
rodič
revize
b9b1adb37f

+ 2 - 0
CHANGES.txt

@@ -289,6 +289,8 @@ BUGFIXES:
   (Eugene Koontz via mahadev)
 
   ZOOKEEPER-1141. zkpython fails tests under python 2.4. (phunt via mahadev)
+  
+  ZOOKEEPER-1025. zkCli is overly sensitive to to spaces. (Laxman via camille)
 
 IMPROVEMENTS:
   ZOOKEEPER-724. Improve junit test integration - log harness information 

+ 8 - 1
src/java/main/org/apache/zookeeper/ZooKeeperMain.java

@@ -40,6 +40,7 @@ import org.apache.zookeeper.ZooDefs.Ids;
 import org.apache.zookeeper.data.ACL;
 import org.apache.zookeeper.data.Id;
 import org.apache.zookeeper.data.Stat;
+import java.util.StringTokenizer;
 
 /**
  * The command line client to ZooKeeper.
@@ -223,7 +224,13 @@ public class ZooKeeperMain {
          * @return true if parsing succeeded.
          */
         public boolean parseCommand( String cmdstring ) {
-            String[] args = cmdstring.split(" ");
+            StringTokenizer cmdTokens = new StringTokenizer(cmdstring, " ");          
+            String[] args = new String[cmdTokens.countTokens()];
+            int tokenIndex = 0;
+            while (cmdTokens.hasMoreTokens()) {
+                args[tokenIndex] = cmdTokens.nextToken();
+                tokenIndex++;
+            }
             if (args.length == 0){
                 return false;
             }

+ 11 - 0
src/java/test/org/apache/zookeeper/ZooKeeperTest.java

@@ -137,4 +137,15 @@ public class ZooKeeperTest extends ClientBase {
     		Assert.assertEquals("KeeperErrorCode = NoNode for /invalidPath", e.getMessage());
     	}
     }
+
+    @Test
+    public void testParseWithExtraSpaces() throws Exception {
+        final ZooKeeper zk = createClient();
+        ZooKeeperMain zkMain = new ZooKeeperMain(zk);
+        String cmdstring = "      ls       /  ";
+        zkMain.cl.parseCommand(cmdstring);
+        Assert.assertEquals("Spaces also considered as characters", zkMain.cl.getNumArguments(), 2);
+        Assert.assertEquals("ls is not taken as first argument", zkMain.cl.getCmdArgument(0), "ls");
+        Assert.assertEquals("/ is not taken as second argument", zkMain.cl.getCmdArgument(1), "/");
+    }
 }