Download raw body.
plug memleaks in got-fetch-pack and got-send-pack
The id_str and refname results of got_gitproto_parse_refline()
were allocated with strdup(3) and must be freed during every
iteration of the loop which parses reflines, not just when the
current function exits.
ok?
diff a53105bc1dc8eafebe5163086c669a3b638435aa /home/stsp/src/got
blob - 171700f1fa26666e69adceb379ea1e594e5513d7
file + libexec/got-fetch-pack/got-fetch-pack.c
--- libexec/got-fetch-pack/got-fetch-pack.c
+++ libexec/got-fetch-pack/got-fetch-pack.c
@@ -377,6 +377,10 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1,
break;
}
}
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
continue;
}
if (strstr(refname, "^{}")) {
@@ -384,6 +388,10 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1,
fprintf(stderr, "%s: ignoring %s\n",
getprogname(), refname);
}
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
continue;
}
@@ -401,6 +409,10 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1,
"%s: ignoring %s\n",
getprogname(), refname);
}
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
continue;
}
found_branch = 1;
@@ -411,6 +423,10 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1,
"%s: ignoring %s\n",
getprogname(), refname);
}
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
continue;
}
found_branch = 1;
@@ -427,6 +443,10 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1,
"%s: ignoring %s\n",
getprogname(), refname);
}
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
continue;
}
found_branch = 1;
@@ -435,6 +455,10 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1,
fprintf(stderr, "%s: ignoring %s\n",
getprogname(), refname);
}
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
continue;
}
}
@@ -480,6 +504,10 @@ fetch_pack(int fd, int packfd, uint8_t *pack_sha1,
free(mine);
}
nref++;
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
}
if (list_refs_only)
blob - eb8f383cfa96ab51e90ae06602d44b10e2336430
file + libexec/got-send-pack/got-send-pack.c
--- libexec/got-send-pack/got-send-pack.c
+++ libexec/got-send-pack/got-send-pack.c
@@ -376,6 +376,10 @@ send_pack(int fd, struct got_pathlist_head *refs,
fprintf(stderr, "%s: ignoring %s\n",
getprogname(), refname);
}
+ free(id_str);
+ id_str = NULL;
+ free(refname);
+ refname = NULL;
continue;
}
plug memleaks in got-fetch-pack and got-send-pack