* sunrpc/clnt_perr.c (clnt_sperror): Don't use fixed size buffer.
	(clnt_spcreateerror): Likewise.
This commit is contained in:
Ulrich Drepper 2008-01-09 21:16:11 +00:00
parent b34437015b
commit aa693c68be
2 changed files with 55 additions and 63 deletions

View File

@ -1,5 +1,9 @@
2008-01-09 Ulrich Drepper <drepper@redhat.com> 2008-01-09 Ulrich Drepper <drepper@redhat.com>
[BZ #5545]
* sunrpc/clnt_perr.c (clnt_sperror): Don't use fixed size buffer.
(clnt_spcreateerror): Likewise.
[BZ #5553] [BZ #5553]
* malloc/malloc.c (public_mALLOc): Set ar_ptr when trying main_arena. * malloc/malloc.c (public_mALLOc): Set ar_ptr when trying main_arena.
(public_mEMALIGn): Likewise. (public_mEMALIGn): Likewise.

View File

@ -60,36 +60,21 @@ static char *auth_errmsg (enum auth_stat stat) internal_function;
static char *buf; static char *buf;
#endif #endif
static char *
_buf (void)
{
if (buf == NULL)
buf = (char *) malloc (256);
return buf;
}
/* /*
* Print reply error info * Print reply error info
*/ */
char * char *
clnt_sperror (CLIENT * rpch, const char *msg) clnt_sperror (CLIENT * rpch, const char *msg)
{ {
char chrbuf[1024];
struct rpc_err e; struct rpc_err e;
char *err;
char *str = _buf ();
char *strstart = str;
int len;
if (str == NULL)
return NULL;
CLNT_GETERR (rpch, &e); CLNT_GETERR (rpch, &e);
len = sprintf (str, "%s: ", msg); const char *errstr = clnt_sperrno (e.re_status);
str += len;
str = stpcpy (str, clnt_sperrno (e.re_status));
char chrbuf[1024];
char *str;
char *tmpstr;
int res;
switch (e.re_status) switch (e.re_status)
{ {
case RPC_SUCCESS: case RPC_SUCCESS:
@ -105,50 +90,52 @@ clnt_sperror (CLIENT * rpch, const char *msg)
case RPC_PMAPFAILURE: case RPC_PMAPFAILURE:
case RPC_PROGNOTREGISTERED: case RPC_PROGNOTREGISTERED:
case RPC_FAILED: case RPC_FAILED:
res = __asprintf (&str, "%s: %s\n", msg, errstr);
break; break;
case RPC_CANTSEND: case RPC_CANTSEND:
case RPC_CANTRECV: case RPC_CANTRECV:
len = sprintf (str, "; errno = %s", __strerror_r (e.re_errno, res = __asprintf (&str, "%s: %s; errno = %s\n",
chrbuf, sizeof chrbuf)); msg, errstr, __strerror_r (e.re_errno,
str += len; chrbuf, sizeof chrbuf));
break; break;
case RPC_VERSMISMATCH: case RPC_VERSMISMATCH:
len= sprintf (str, _("; low version = %lu, high version = %lu"), res = __asprintf (&str,
e.re_vers.low, e.re_vers.high); _("%s: %s; low version = %lu, high version = %lu"),
str += len; msg, errstr, e.re_vers.low, e.re_vers.high);
break; break;
case RPC_AUTHERROR: case RPC_AUTHERROR:
err = auth_errmsg (e.re_why); tmpstr = auth_errmsg (e.re_why);
str = stpcpy (str, _ ("; why = ")); if (tmpstr != NULL)
if (err != NULL) res = __asprintf (&str, _("%s: %s; why = %s\n"), msg, errstr, tmpstr);
{
str = stpcpy (str, err);
}
else else
{ res = __asprintf (&str, _("\
len = sprintf (str, _("(unknown authentication error - %d)"), %s: %s; why = (unknown authentication error - %d)\n"),
(int) e.re_why); msg, errstr, (int) e.re_why);
str += len;
}
break; break;
case RPC_PROGVERSMISMATCH: case RPC_PROGVERSMISMATCH:
len = sprintf (str, _("; low version = %lu, high version = %lu"), res = __asprintf (&str,
e.re_vers.low, e.re_vers.high); _("%s: %s; low version = %lu, high version = %lu"),
str += len; msg, errstr, e.re_vers.low, e.re_vers.high);
break; break;
default: /* unknown */ default: /* unknown */
len = sprintf (str, "; s1 = %lu, s2 = %lu", e.re_lb.s1, e.re_lb.s2); res = __asprintf (&str, "%s: %s; s1 = %lu, s2 = %lu",
str += len; msg, errstr, e.re_lb.s1, e.re_lb.s2);
break; break;
} }
*str = '\n';
*++str = '\0'; if (res < 0)
return (strstart); return NULL;
char *oldbuf = buf;
buf = str;
free (oldbuf);
return str;
} }
libc_hidden_def (clnt_sperror) libc_hidden_def (clnt_sperror)
@ -291,35 +278,36 @@ clnt_perrno (enum clnt_stat num)
char * char *
clnt_spcreateerror (const char *msg) clnt_spcreateerror (const char *msg)
{ {
char chrbuf[1024]; struct rpc_createerr *ce = &get_rpc_createerr ();
char *str = _buf ();
char *cp;
int len;
struct rpc_createerr *ce;
if (str == NULL) char chrbuf[1024];
return NULL; const char *connector = "";
ce = &get_rpc_createerr (); const char *errstr = "";
len = sprintf (str, "%s: ", msg);
cp = str + len;
cp = stpcpy (cp, clnt_sperrno (ce->cf_stat));
switch (ce->cf_stat) switch (ce->cf_stat)
{ {
case RPC_PMAPFAILURE: case RPC_PMAPFAILURE:
cp = stpcpy (stpcpy (cp, " - "), connector = " - ";
clnt_sperrno (ce->cf_error.re_status)); errstr = clnt_sperrno (ce->cf_error.re_status);
break; break;
case RPC_SYSTEMERROR: case RPC_SYSTEMERROR:
cp = stpcpy (stpcpy (cp, " - "), connector = " - ";
__strerror_r (ce->cf_error.re_errno, errstr = __strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf);
chrbuf, sizeof chrbuf));
break; break;
default: default:
break; break;
} }
*cp = '\n';
*++cp = '\0'; char *str;
if (__asprintf (&str, "%s: %s%s%s\n",
msg, clnt_sperrno (ce->cf_stat), connector, errstr) < 0)
return NULL;
char *oldbuf = buf;
buf = str;
free (oldbuf);
return str; return str;
} }
libc_hidden_def (clnt_spcreateerror) libc_hidden_def (clnt_spcreateerror)