cppcheck found these, are they worth fixing?

In the non-fail case, done is set to NULL and then free()d.  
free(NULL) is legal but maybe worth removing?

diff --git usr.bin/ssh/scp.c usr.bin/ssh/scp.c
index f0f09bba623..acb7bd8a8a1 100644
--- usr.bin/ssh/scp.c
+++ usr.bin/ssh/scp.c
@@ -935,19 +935,21 @@ brace_expand(const char *pattern, char ***patternsp, 
size_t *npatternsp)
        *npatternsp = ndone;
        done = NULL;
        ndone = 0;
        ret = 0;
  fail:
        for (i = 0; i < nactive; i++)
                free(active[i]);
        free(active);
-       for (i = 0; i < ndone; i++)
-               free(done[i]);
-       free(done);
+       if (done) {
+               for (i = 0; i < ndone; i++)
+                       free(done[i]);
+               free(done);
+       }
        return ret;
 }
 
 static struct sftp_conn *
 do_sftp_connect(char *host, char *user, int port, char *sftp_direct,
    int *reminp, int *remoutp, int *pidp)
 {
        if (sftp_direct == NULL) {


grp == NULL fatal()s, so remove the ternary operations that will 
never be the conditionals they aspire to be.

diff --git usr.bin/ssh/sshpty.c usr.bin/ssh/sshpty.c
index faf8960cfb5..690263a8cf3 100644
--- usr.bin/ssh/sshpty.c
+++ usr.bin/ssh/sshpty.c
@@ -143,8 +143,8 @@ pty_setowner(struct passwd *pw, const char *tty)
        grp = getgrnam("tty");
        if (grp == NULL)
                fatal("no tty group");
-       gid = (grp != NULL) ? grp->gr_gid : pw->pw_gid;
-       mode = (grp != NULL) ? 0620 : 0600;
+       gid = grp->gr_gid;
+       mode = 0620;
 
        /*
         * Change owner and mode of the tty as required.


These parentheses checking the result of an assignment were 
confusing, so move them.

diff --git usr.bin/ssh/authfd.c usr.bin/ssh/authfd.c
index 4b81b385637..05011f8c5c9 100644
--- usr.bin/ssh/authfd.c
+++ usr.bin/ssh/authfd.c
@@ -489,8 +489,8 @@ encode_dest_constraint(struct sshbuf *m, const struct 
dest_constraint *dc)
 
        if ((b = sshbuf_new()) == NULL)
                return SSH_ERR_ALLOC_FAIL;
-       if ((r = encode_dest_constraint_hop(b, &dc->from) != 0) ||
-           (r = encode_dest_constraint_hop(b, &dc->to) != 0) ||
+       if ((r = encode_dest_constraint_hop(b, &dc->from)) != 0 ||
+           (r = encode_dest_constraint_hop(b, &dc->to)) != 0 ||
            (r = sshbuf_put_string(b, NULL, 0)) != 0) /* reserved */
                goto out;
        if ((r = sshbuf_put_stringb(m, b)) != 0)
diff --git usr.bin/ssh/readconf.c usr.bin/ssh/readconf.c
index e9d3a756896..81456c9b6d3 100644
--- usr.bin/ssh/readconf.c
+++ usr.bin/ssh/readconf.c
@@ -602,7 +602,7 @@ match_cfg_line(Options *options, char **condition, struct 
passwd *pw,
                }
                arg = criteria = NULL;
                this_result = 1;
-               if ((negate = attrib[0] == '!'))
+               if ((negate = (attrib[0] == '!')))
                        attrib++;
                /* Criterion "all" has no argument and must appear alone */
                if (strcasecmp(attrib, "all") == 0) {
diff --git usr.bin/ssh/ssh-agent.c usr.bin/ssh/ssh-agent.c
index 0e4d7f675ab..de1cdb049a2 100644
--- usr.bin/ssh/ssh-agent.c
+++ usr.bin/ssh/ssh-agent.c
@@ -1010,8 +1010,8 @@ parse_dest_constraint(struct sshbuf *m, struct 
dest_constraint *dc)
                error_fr(r, "parse");
                goto out;
        }
-       if ((r = parse_dest_constraint_hop(frombuf, &dc->from) != 0) ||
-           (r = parse_dest_constraint_hop(tobuf, &dc->to) != 0))
+       if ((r = parse_dest_constraint_hop(frombuf, &dc->from)) != 0 ||
+           (r = parse_dest_constraint_hop(tobuf, &dc->to)) != 0)
                goto out; /* already logged */
        if (elen != 0) {
                error_f("unsupported extensions (len %zu)", elen);

Reply via email to