From a53a9f6906a243bc8c6e4966de2cebb5a388aad2 Mon Sep 17 00:00:00 2001 From: Brian Somers Date: Mon, 20 Aug 2001 12:31:13 +0000 Subject: [PATCH] Handle snrintf() returning -1. MFC after: 2 weeks --- lib/libc/rpc/clnt_perror.c | 46 +++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/lib/libc/rpc/clnt_perror.c b/lib/libc/rpc/clnt_perror.c index 6ddf39d9834..f277f9e499c 100644 --- a/lib/libc/rpc/clnt_perror.c +++ b/lib/libc/rpc/clnt_perror.c @@ -94,9 +94,10 @@ clnt_sperror(rpch, s) strstart = str; CLNT_GETERR(rpch, &e); - i = snprintf(str, len, "%s: ", s); - str += i; - len -= i; + if ((i = snprintf(str, len, "%s: ", s)) > 0) { + str += i; + len -= i; + } (void)strncpy(str, clnt_sperrno(e.re_status), len - 1); i = strlen(str); @@ -122,22 +123,28 @@ clnt_sperror(rpch, s) case RPC_CANTSEND: case RPC_CANTRECV: i = snprintf(str, len, "; errno = %s", strerror(e.re_errno)); - str += i; - len -= i; + if (i > 0) { + str += i; + len -= i; + } break; case RPC_VERSMISMATCH: i = snprintf(str, len, "; low version = %u, high version = %u", e.re_vers.low, e.re_vers.high); - str += i; - len -= i; + if (i > 0) { + str += i; + len -= i; + } break; case RPC_AUTHERROR: err = auth_errmsg(e.re_why); i = snprintf(str, len, "; why = "); - str += i; - len -= i; + if (i > 0) { + str += i; + len -= i; + } if (err != NULL) { i = snprintf(str, len, "%s",err); } else { @@ -145,22 +152,28 @@ clnt_sperror(rpch, s) "(unknown authentication error - %d)", (int) e.re_why); } - str += i; - len -= i; + if (i > 0) { + str += i; + len -= i; + } break; case RPC_PROGVERSMISMATCH: i = snprintf(str, len, "; low version = %u, high version = %u", e.re_vers.low, e.re_vers.high); - str += i; - len -= i; + if (i > 0) { + str += i; + len -= i; + } break; default: /* unknown */ i = snprintf(str, len, "; s1 = %u, s2 = %u", e.re_lb.s1, e.re_lb.s2); - str += i; - len -= i; + if (i > 0) { + str += i; + len -= i; + } break; } strstart[CLNT_PERROR_BUFLEN-1] = '\0'; @@ -239,7 +252,8 @@ clnt_spcreateerror(s) return(0); len = CLNT_PERROR_BUFLEN; i = snprintf(str, len, "%s: ", s); - len -= i; + if (i > 0) + len -= i; (void)strncat(str, clnt_sperrno(rpc_createerr.cf_stat), len - 1); switch (rpc_createerr.cf_stat) { case RPC_PMAPFAILURE: