bundle: plug minor memory leak in is_tag_in_date_range()
PATCH 1/1 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 <[email protected]>
--- bundle.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
bundle.c +10 -6
@@ -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,
Signature · 1 line
2.1.2
bundle.c static int is_tag_in_date_range(struct object *tag, struct rev_info *revs) · line 212
Quoted 5 lines · René Scharfe
bundle.c +0
-0@@ -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 <[email protected]>
bundle.c +4 -5
@@ -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; }