Check return value from asprintf instead of string != NULL since it

undefined behavior on Linux. From Björn Sandell


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@16218 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2005-10-22 14:18:19 +00:00
parent 5f70cc361a
commit e5dc0153d3

View File

@@ -179,6 +179,7 @@ toremote(char *targ, int argc, char **argv)
for (i = 0; i < argc - 1; i++) { for (i = 0; i < argc - 1; i++) {
src = colon(argv[i]); src = colon(argv[i]);
if (src) { /* remote to remote */ if (src) { /* remote to remote */
int ret;
*src++ = 0; *src++ = 0;
if (*src == 0) if (*src == 0)
src = "."; src = ".";
@@ -190,28 +191,27 @@ toremote(char *targ, int argc, char **argv)
suser = pwd->pw_name; suser = pwd->pw_name;
else if (!okname(suser)) else if (!okname(suser))
continue; continue;
asprintf(&bp, ret = asprintf(&bp,
"%s%s %s -l %s -n %s %s '%s%s%s:%s'", "%s%s %s -l %s -n %s %s '%s%s%s:%s'",
_PATH_RSH, eflag ? " -e" : "", _PATH_RSH, eflag ? " -e" : "",
host, suser, cmd, src, host, suser, cmd, src,
tuser ? tuser : "", tuser ? "@" : "", tuser ? tuser : "", tuser ? "@" : "",
thost, targ); thost, targ);
} else { } else {
asprintf(&bp, ret = asprintf(&bp,
"exec %s%s %s -n %s %s '%s%s%s:%s'", "exec %s%s %s -n %s %s '%s%s%s:%s'",
_PATH_RSH, eflag ? " -e" : "", _PATH_RSH, eflag ? " -e" : "",
argv[i], cmd, src, argv[i], cmd, src,
tuser ? tuser : "", tuser ? "@" : "", tuser ? tuser : "", tuser ? "@" : "",
thost, targ); thost, targ);
} }
if (bp == NULL) if (ret == -1)
err (1, "malloc"); err (1, "malloc");
susystem(bp, userid); susystem(bp, userid);
free(bp); free(bp);
} else { /* local to remote */ } else { /* local to remote */
if (remin == -1) { if (remin == -1) {
asprintf(&bp, "%s -t %s", cmd, targ); if (asprintf(&bp, "%s -t %s", cmd, targ) == -1)
if (bp == NULL)
err (1, "malloc"); err (1, "malloc");
host = thost; host = thost;
@@ -235,11 +235,13 @@ tolocal(int argc, char **argv)
char *bp, *host, *src, *suser; char *bp, *host, *src, *suser;
for (i = 0; i < argc - 1; i++) { for (i = 0; i < argc - 1; i++) {
int ret;
if (!(src = colon(argv[i]))) { /* Local to local. */ if (!(src = colon(argv[i]))) { /* Local to local. */
asprintf(&bp, "exec %s%s%s %s %s", _PATH_CP, ret = asprintf(&bp, "exec %s%s%s %s %s", _PATH_CP,
iamrecursive ? " -PR" : "", pflag ? " -p" : "", iamrecursive ? " -PR" : "", pflag ? " -p" : "",
argv[i], argv[argc - 1]); argv[i], argv[argc - 1]);
if (bp == NULL) if (ret == -1)
err (1, "malloc"); err (1, "malloc");
if (susystem(bp, userid)) if (susystem(bp, userid))
++errs; ++errs;
@@ -260,8 +262,8 @@ tolocal(int argc, char **argv)
else if (!okname(suser)) else if (!okname(suser))
continue; continue;
} }
asprintf(&bp, "%s -f %s", cmd, src); ret = asprintf(&bp, "%s -f %s", cmd, src);
if (bp == NULL) if (ret == -1)
err (1, "malloc"); err (1, "malloc");
if (do_cmd(host, suser, bp, &remin, &remout) < 0) { if (do_cmd(host, suser, bp, &remin, &remout) < 0) {
free(bp); free(bp);