bin/83349: commit references a PR

dfilter service dfilter at FreeBSD.ORG
Fri Dec 23 02:20:11 UTC 2011


The following reply was made to PR bin/83349; it has been noted by GNATS.

From: dfilter at FreeBSD.ORG (dfilter service)
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: bin/83349: commit references a PR
Date: Fri, 23 Dec 2011 02:13:54 +0000 (UTC)

 Author: ghelmer
 Date: Fri Dec 23 02:13:42 2011
 New Revision: 228828
 URL: http://svn.freebsd.org/changeset/base/228828
 
 Log:
   Handle malloc failures in yplib.c.
   
   PR:		bin/83349
 
 Modified:
   head/lib/libc/yp/yplib.c
 
 Modified: head/lib/libc/yp/yplib.c
 ==============================================================================
 --- head/lib/libc/yp/yplib.c	Fri Dec 23 02:04:35 2011	(r228827)
 +++ head/lib/libc/yp/yplib.c	Fri Dec 23 02:13:42 2011	(r228828)
 @@ -331,6 +331,8 @@ _yp_dobind(char *dom, struct dom_binding
  
  	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, co
  */
  		*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 @@ again:
  	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 @@ again:
  	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 @@ again:
  	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';
  	}
 _______________________________________________
 svn-src-all at freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe at freebsd.org"
 


More information about the freebsd-bugs mailing list