Fix command handling in the C client shell (phunt via fpj)
authorFlavio Paiva Junqueira <fpj@apache.org>
Wed, 10 Aug 2016 14:11:48 +0000 (14:11 +0000)
committerFlavio Paiva Junqueira <fpj@apache.org>
Wed, 10 Aug 2016 14:11:48 +0000 (14:11 +0000)
git-svn-id: https://svn.apache.org/repos/asf/zookeeper/branches/branch-3.4@1755750 13f79535-47bb-0310-9956-ffa450edef68

CHANGES.txt
src/c/README
src/c/src/cli.c

index 0f3f3f1..1138c98 100644 (file)
@@ -45,6 +45,8 @@ BUGFIXES:
   ZOOKEEPER-2498: Potential resource leak in C client when processing
   unexpected / out of order response (Michael Han via rgs)
 
+  Fix command handling in the C client shell (phunt via fpj)
+
 IMPROVEMENTS:
 
   ZOOKEEPER-2240 Make the three-node minimum more explicit in 
index 0b31d0a..ea3d5d3 100644 (file)
@@ -72,7 +72,12 @@ tar downloaded from Apache please skip to step 2.
    other document formats please use "./configure --help"
 
 
-USING THE CLIENT
+EXAMPLE/SAMPLE C CLIENT SHELL
+
+NOTE: the ZooKeeper C client shell (cli_st and cli_mt) is meant as a
+example/sample of ZooKeeper C client API usage. It is not a full
+fledged client and not meant for production usage - see the Java
+client shell for a fully featured shell.
 
 You can test your client by running a zookeeper server (see
 instructions on the project wiki page on how to run it) and connecting
index 7b3cd61..ef32a10 100644 (file)
  * limitations under the License.
  */
 
+/**
+ * cli.c is a example/sample C client shell for ZooKeeper. It contains
+ * basic shell functionality which exercises some of the features of
+ * the ZooKeeper C client API. It is not a full fledged client and is
+ * not meant for production usage - see the Java client shell for a
+ * fully featured shell.
+ */
+
 #include <zookeeper.h>
 #include <proto.h>
 #include <stdlib.h>
@@ -540,7 +548,15 @@ int main(int argc, char **argv) {
     }
     if (argc > 2) {
       if(strncmp("cmd:",argv[2],4)==0){
-        strcpy(cmd,argv[2]+4);
+        size_t cmdlen = strlen(argv[2]);
+        if (cmdlen > sizeof(cmd)) {
+          fprintf(stderr,
+                  "Command length %zu exceeds max length of %zu\n",
+                  cmdlen,
+                  sizeof(cmd));
+          return 2;
+        }
+        strncpy(cmd, argv[2]+4, sizeof(cmd));
         batchMode=1;
         fprintf(stderr,"Batch mode: %s\n",cmd);
       }else{