plug memory leaks on error in gw_commits()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
diff --git a/gotweb/gotweb.c b/gotweb/gotweb.c
index f7bb586..74afd10 100644
--- a/gotweb/gotweb.c
+++ b/gotweb/gotweb.c
@@ -575,16 +575,22 @@ gw_commits(struct gw_trans *gw_trans)
error = gw_get_header(gw_trans, header,
gw_trans->gw_conf->got_max_commits_display);
+ if (error)
+ goto done;
kerr = khttp_puts(gw_trans->gw_req, commits_wrapper);
- if (kerr != KCGI_OK)
- return gw_kcgi_error(kerr);
+ if (kerr != KCGI_OK) {
+ error = gw_kcgi_error(kerr);
+ goto done;
+ }
TAILQ_FOREACH(n_header, &gw_trans->gw_headers, entry) {
if ((asprintf(&commits_navs_html, commits_navs,
gw_trans->repo_name, n_header->commit_id,
gw_trans->repo_name, n_header->commit_id,
- gw_trans->repo_name, n_header->commit_id)) == -1)
- return got_error_from_errno("asprintf");
+ gw_trans->repo_name, n_header->commit_id)) == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
if ((asprintf(&commits_html, commits_line,
gw_gen_commit_header(n_header->commit_id,
@@ -593,16 +599,20 @@ gw_commits(struct gw_trans *gw_trans)
gw_gen_committer_header(n_header->committer),
gw_gen_age_header(gw_get_time_str(n_header->committer_time,
TM_LONG)), gw_html_escape(n_header->commit_msg),
- commits_navs_html)) == -1)
- return got_error_from_errno("asprintf");
+ commits_navs_html)) == -1) {
+ error = got_error_from_errno("asprintf");
+ goto done;
+ }
kerr = khttp_puts(gw_trans->gw_req, commits_html);
- if (kerr != KCGI_OK)
- return gw_kcgi_error(kerr);
+ if (kerr != KCGI_OK) {
+ error = gw_kcgi_error(kerr);
+ goto done;
+ }
}
kerr = khttp_puts(gw_trans->gw_req, div_end);
if (kerr != KCGI_OK)
error = gw_kcgi_error(kerr);
-
+done:
got_ref_list_free(&header->refs);
gw_free_headers(header);
TAILQ_FOREACH(n_header, &gw_trans->gw_headers, entry)