Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Jul 2014 15:48:12 +0000 (UTC)
From:      "Pedro F. Giffuni" <pfg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r268799 - head/usr.bin/grep
Message-ID:  <201407171548.s6HFmCk5045268@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pfg
Date: Thu Jul 17 15:48:11 2014
New Revision: 268799
URL: http://svnweb.freebsd.org/changeset/base/268799

Log:
  grep: fix some memory leaks.
  
  Bring a couple of changes from NetBSD:
  
  queue.c (CVS Rev. 1.4. 1.5)
  Fix memory leaks.
  NULL does not need a cast.
  
  grep.c (CVS Rev. 1.6)
  Use the more portable getline.
  
  Obtained from:	NetBSD
  MFC after:	3 days

Modified:
  head/usr.bin/grep/grep.c
  head/usr.bin/grep/queue.c

Modified: head/usr.bin/grep/grep.c
==============================================================================
--- head/usr.bin/grep/grep.c	Thu Jul 17 14:51:50 2014	(r268798)
+++ head/usr.bin/grep/grep.c	Thu Jul 17 15:48:11 2014	(r268799)
@@ -1,4 +1,4 @@
-/*	$NetBSD: grep.c,v 1.4 2011/02/16 01:31:33 joerg Exp $	*/
+/*	$NetBSD: grep.c,v 1.6 2011/04/18 03:48:23 joerg Exp $	*/
 /* 	$FreeBSD$	*/
 /*	$OpenBSD: grep.c,v 1.42 2010/07/02 22:18:03 tedu Exp $	*/
 
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
 #include <libgen.h>
 #include <locale.h>
 #include <stdbool.h>
+#define _WITH_GETLINE
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -304,6 +305,7 @@ read_patterns(const char *fn)
 	FILE *f;
 	char *line;
 	size_t len;
+	ssize_t rlen;
 
 	if ((f = fopen(fn, "r")) == NULL)
 		err(2, "%s", fn);
@@ -311,8 +313,11 @@ read_patterns(const char *fn)
 		fclose(f);
 		return;
 	}
-	while ((line = fgetln(f, &len)) != NULL)
+	len = 0;
+	line = NULL;
+	while ((rlen = getline(&line, &len, f)) != -1)
 		add_pattern(line, line[0] == '\n' ? 0 : len);
+	free(line);
 	if (ferror(f))
 		err(2, "%s", fn);
 	fclose(f);

Modified: head/usr.bin/grep/queue.c
==============================================================================
--- head/usr.bin/grep/queue.c	Thu Jul 17 14:51:50 2014	(r268798)
+++ head/usr.bin/grep/queue.c	Thu Jul 17 15:48:11 2014	(r268799)
@@ -1,4 +1,4 @@
-/*	$NetBSD: queue.c,v 1.2 2011/02/16 01:31:33 joerg Exp $	*/
+/*	$NetBSD: queue.c,v 1.5 2011/08/31 16:24:57 plunky Exp $	*/
 /*	$FreeBSD$	*/
 
 /*-
@@ -68,8 +68,11 @@ enqueue(struct str *x)
 
 	STAILQ_INSERT_TAIL(&queue, item, list);
 
-	if (++count > Bflag)
-		free(dequeue());
+	if (++count > Bflag) {
+		item = dequeue();
+		free(item->data.dat);
+		free(item);
+	}
 }
 
 static struct qentry *
@@ -92,7 +95,7 @@ printqueue(void)
 	struct qentry *item;
 
 	while ((item = dequeue()) != NULL) {
-		printline(&item->data, '-', (regmatch_t *)NULL, 0);
+		printline(&item->data, '-', NULL, 0);
 		free(item);
 	}
 }
@@ -102,6 +105,8 @@ clearqueue(void)
 {
 	struct qentry *item;
 
-	while ((item = dequeue()) != NULL)
+	while ((item = dequeue()) != NULL) {
+		free(item->data.dat);
 		free(item);
+	}
 }



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