multipathd: fix memory issues in cli.c
authorHannes Reinecke <hare@suse.de>
Tue, 17 May 2011 12:46:56 +0000 (14:46 +0200)
committerHannes Reinecke <hare@suse.de>
Tue, 17 May 2011 12:46:56 +0000 (14:46 +0200)
Some memory issues in cli.c have been found by valgrind.

Signed-off-by: Hannes Reinecke <hare@suse.de>
multipathd/cli.c

index 7851a3e..3316004 100644 (file)
@@ -232,10 +232,9 @@ get_cmdvec (char * cmd, vector *v)
 
        strvec = alloc_strvec(cmd);
        if (!strvec)
 
        strvec = alloc_strvec(cmd);
        if (!strvec)
-               return 0;
+               return E_NOMEM;
 
        cmdvec = vector_alloc();
 
        cmdvec = vector_alloc();
-       *v = cmdvec;
 
        if (!cmdvec) {
                free_strvec(strvec);
 
        if (!cmdvec) {
                free_strvec(strvec);
@@ -275,17 +274,17 @@ get_cmdvec (char * cmd, vector *v)
                r = E_NOPARM;
                goto out;
        }
                r = E_NOPARM;
                goto out;
        }
+       *v = cmdvec;
        free_strvec(strvec);
        return 0;
 
 out:
        free_strvec(strvec);
        free_keys(cmdvec);
        free_strvec(strvec);
        return 0;
 
 out:
        free_strvec(strvec);
        free_keys(cmdvec);
-       *v = NULL;
        return r;
 }
 
        return r;
 }
 
-static int 
+static int
 fingerprint(vector vec)
 {
        int i;
 fingerprint(vector vec)
 {
        int i;
@@ -372,8 +371,6 @@ parse_cmd (char * cmd, char ** reply, int * len, void * data)
        r = get_cmdvec(cmd, &cmdvec);
 
        if (r) {
        r = get_cmdvec(cmd, &cmdvec);
 
        if (r) {
-               if (cmdvec)
-                       free_keys(cmdvec);
                *reply = genhelp_handler();
                *len = strlen(*reply) + 1;
                return 0;
                *reply = genhelp_handler();
                *len = strlen(*reply) + 1;
                return 0;
@@ -381,7 +378,7 @@ parse_cmd (char * cmd, char ** reply, int * len, void * data)
 
        h = find_handler(fingerprint(cmdvec));
 
 
        h = find_handler(fingerprint(cmdvec));
 
-       if (!h) {
+       if (!h || !h->fn) {
                *reply = genhelp_handler();
                *len = strlen(*reply) + 1;
                free_keys(cmdvec);
                *reply = genhelp_handler();
                *len = strlen(*reply) + 1;
                free_keys(cmdvec);