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

From: dfil...@freebsd.org (dfilter service)
To: bug-follo...@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-...@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"
 
_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"

Reply via email to