Handle malloc failures in yplib.c.

PR:		bin/83349
This commit is contained in:
Guy Helmer 2011-12-23 02:13:42 +00:00
parent f855a3c570
commit 6890d15663
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=228828

View File

@ -331,6 +331,8 @@ _yp_dobind(char *dom, struct dom_binding **ypdb)
if (ysd == NULL) {
ysd = (struct dom_binding *)malloc(sizeof *ysd);
if (ysd == NULL)
return (YPERR_RESRC);
bzero((char *)ysd, sizeof *ysd);
ysd->dom_socket = -1;
ysd->dom_vers = 0;
@ -683,11 +685,18 @@ yp_match(char *indomain, char *inmap, const char *inkey, int inkeylen,
*/
*outvallen = yprv.val.valdat_len;
*outval = (char *)malloc(*outvallen+1);
if (*outval == NULL) {
_yp_unbind(ysd);
*outvallen = 0;
YPUNLOCK();
return (YPERR_RESRC);
}
bcopy(yprv.val.valdat_val, *outval, *outvallen);
(*outval)[*outvallen] = '\0';
YPUNLOCK();
return (0);
}
_yp_unbind(ysd);
#endif
again:
@ -713,6 +722,13 @@ yp_match(char *indomain, char *inmap, const char *inkey, int inkeylen,
if (!(r = ypprot_err(yprv.stat))) {
*outvallen = yprv.val.valdat_len;
*outval = (char *)malloc(*outvallen+1);
if (*outval == NULL) {
_yp_unbind(ysd);
*outvallen = 0;
xdr_free((xdrproc_t)xdr_ypresp_val, &yprv);
YPUNLOCK();
return (YPERR_RESRC);
}
bcopy(yprv.val.valdat_val, *outval, *outvallen);
(*outval)[*outvallen] = '\0';
#ifdef YPMATCHCACHE
@ -791,10 +807,25 @@ yp_first(char *indomain, char *inmap, char **outkey, int *outkeylen,
if (!(r = ypprot_err(yprkv.stat))) {
*outkeylen = yprkv.key.keydat_len;
*outkey = (char *)malloc(*outkeylen+1);
if (*outkey == NULL) {
_yp_unbind(ysd);
*outkeylen = 0;
xdr_free((xdrproc_t)xdr_ypresp_key_val, &yprkv);
YPUNLOCK();
return (YPERR_RESRC);
}
bcopy(yprkv.key.keydat_val, *outkey, *outkeylen);
(*outkey)[*outkeylen] = '\0';
*outvallen = yprkv.val.valdat_len;
*outval = (char *)malloc(*outvallen+1);
if (*outval == NULL) {
free(*outkey);
_yp_unbind(ysd);
*outkeylen = *outvallen = 0;
xdr_free((xdrproc_t)xdr_ypresp_key_val, &yprkv);
YPUNLOCK();
return (YPERR_RESRC);
}
bcopy(yprkv.val.valdat_val, *outval, *outvallen);
(*outval)[*outvallen] = '\0';
}
@ -851,10 +882,25 @@ yp_next(char *indomain, char *inmap, char *inkey, int inkeylen,
if (!(r = ypprot_err(yprkv.stat))) {
*outkeylen = yprkv.key.keydat_len;
*outkey = (char *)malloc(*outkeylen+1);
if (*outkey == NULL) {
_yp_unbind(ysd);
*outkeylen = 0;
xdr_free((xdrproc_t)xdr_ypresp_key_val, &yprkv);
YPUNLOCK();
return (YPERR_RESRC);
}
bcopy(yprkv.key.keydat_val, *outkey, *outkeylen);
(*outkey)[*outkeylen] = '\0';
*outvallen = yprkv.val.valdat_len;
*outval = (char *)malloc(*outvallen+1);
if (*outval == NULL) {
free(*outkey);
_yp_unbind(ysd);
*outkeylen = *outvallen = 0;
xdr_free((xdrproc_t)xdr_ypresp_key_val, &yprkv);
YPUNLOCK();
return (YPERR_RESRC);
}
bcopy(yprkv.val.valdat_val, *outval, *outvallen);
(*outval)[*outvallen] = '\0';
}