[PATCH] bundle: plug minor memory leak in is_tag_in_date_range()
Free the buffer returned by read_sha1_file() even if no valid tagger line is found. Signed-off-by: Rene Scharfe l@web.de --- bundle.c | 16 ++-- 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bundle.c b/bundle.c index b2b89fe..9ed865c 100644 --- a/bundle.c +++ b/bundle.c @@ -211,24 +211,28 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs) enum object_type type; char *buf, *line, *lineend; unsigned long date; + int result = 1; if (revs-max_age == -1 revs-min_age == -1) - return 1; + goto out; buf = read_sha1_file(tag-sha1, type, size); if (!buf) - return 1; + goto out; line = memmem(buf, size, \ntagger , 8); if (!line++) - return 1; + goto out_free; lineend = memchr(line, '\n', buf + size - line); line = memchr(line, '', lineend ? lineend - line : buf + size - line); if (!line++) - return 1; + goto out_free; date = strtoul(line, NULL, 10); - free(buf); - return (revs-max_age == -1 || revs-max_age date) + result = (revs-max_age == -1 || revs-max_age date) (revs-min_age == -1 || revs-min_age date); +out_free: + free(buf); +out: + return result; } int create_bundle(struct bundle_header *header, const char *path, -- 2.1.2 -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] bundle: plug minor memory leak in is_tag_in_date_range()
René Scharfe wrote: --- a/bundle.c +++ b/bundle.c @@ -211,24 +211,28 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs) enum object_type type; char *buf, *line, *lineend; If buf is initialized to NULL, there is no need for separate out and out_free labels. With or without such a change, Reviewed-by: Jonathan Nieder jrnie...@gmail.com diff --git i/bundle.c w/bundle.c index 4158e11..101cde0 100644 --- i/bundle.c +++ w/bundle.c @@ -209,7 +209,7 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs) { unsigned long size; enum object_type type; - char *buf, *line, *lineend; + char *buf = NULL, *line, *lineend; unsigned long date; int result = 1; @@ -221,17 +221,16 @@ static int is_tag_in_date_range(struct object *tag, struct rev_info *revs) goto out; line = memmem(buf, size, \ntagger , 8); if (!line++) - goto out_free; + goto out; lineend = memchr(line, '\n', buf + size - line); line = memchr(line, '', lineend ? lineend - line : buf + size - line); if (!line++) - goto out_free; + goto out; date = strtoul(line, NULL, 10); result = (revs-max_age == -1 || revs-max_age date) (revs-min_age == -1 || revs-min_age date); -out_free: - free(buf); out: + free(buf); return result; } -- To unsubscribe from this list: send the line unsubscribe git in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html