Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 31 May 2017 21:31:15 +0000 (UTC)
From:      "Stephen J. Kiernan" <stevek@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r319361 - head/sbin/dhclient
Message-ID:  <201705312131.v4VLVFnb054265@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: stevek
Date: Wed May 31 21:31:15 2017
New Revision: 319361
URL: https://svnweb.freebsd.org/changeset/base/319361

Log:
  parse.c parse_string
  When parse_semi fails, free s before returning
  
  parse.c parse_numeric_aggregate
  The memory assigned to bufp is complicated, it can either be from the input
  parameter buf or allocated locally. Introduce a new variable lbufp to track
  when it is assigned locally and to free it when appropriate.
  
  Submitted by:	Thomas Rix <trix@juniper.net>
  Reviewed by:	jhb
  Approved by:	sjg (mentor)
  Obtained from:	Juniper Networks, Inc.
  MFC after:	1 week
  Differential Revision:	https://reviews.freebsd.org/D9899

Modified:
  head/sbin/dhclient/parse.c

Modified: head/sbin/dhclient/parse.c
==============================================================================
--- head/sbin/dhclient/parse.c	Wed May 31 21:20:42 2017	(r319360)
+++ head/sbin/dhclient/parse.c	Wed May 31 21:31:15 2017	(r319361)
@@ -131,8 +131,10 @@ parse_string(FILE *cfile)
 		error("no memory for string %s.", val);
 	memcpy(s, val, valsize);
 
-	if (!parse_semi(cfile))
+	if (!parse_semi(cfile)) {
+		free(s);
 		return (NULL);
+	}
 	return (s);
 }
 
@@ -246,9 +248,10 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *bu
 	char *val, *t;
 	size_t valsize;
 	pair c = NULL;
+	unsigned char *lbufp = NULL;
 
 	if (!bufp && *max) {
-		bufp = malloc(*max * size / 8);
+		lbufp = bufp = malloc(*max * size / 8);
 		if (!bufp)
 			error("can't allocate space for numeric aggregate");
 	} else
@@ -265,6 +268,7 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *bu
 				parse_warn("too few numbers.");
 				if (token != SEMI)
 					skip_to_semi(cfile);
+				free(lbufp);
 				return (NULL);
 			}
 			token = next_token(&val, cfile);
@@ -281,6 +285,7 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *bu
 		    (base != 16 || token != NUMBER_OR_NAME)) {
 			parse_warn("expecting numeric value.");
 			skip_to_semi(cfile);
+			free(lbufp);
 			return (NULL);
 		}
 		/*
@@ -302,6 +307,7 @@ parse_numeric_aggregate(FILE *cfile, unsigned char *bu
 
 	/* If we had to cons up a list, convert it now. */
 	if (c) {
+		free(lbufp);
 		bufp = malloc(count * size / 8);
 		if (!bufp)
 			error("can't allocate space for numeric aggregate.");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201705312131.v4VLVFnb054265>