shortlog: use strbufs to read from stdin
We currently use fixed-size buffers with fgets(), which could lead to incorrect results in the unlikely event that a line had something like "Author:" at exactly its 1024th character. But it's easy to convert this to a strbuf, and because we can reuse the same buffer through the loop, we don't even pay the extra allocation cost. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
5c3894c39d
commit
50250491bd
@ -91,21 +91,24 @@ static void insert_one_record(struct shortlog *log,
|
|||||||
|
|
||||||
static void read_from_stdin(struct shortlog *log)
|
static void read_from_stdin(struct shortlog *log)
|
||||||
{
|
{
|
||||||
char author[1024], oneline[1024];
|
struct strbuf author = STRBUF_INIT;
|
||||||
|
struct strbuf oneline = STRBUF_INIT;
|
||||||
|
|
||||||
while (fgets(author, sizeof(author), stdin) != NULL) {
|
while (strbuf_getline(&author, stdin, '\n') != EOF) {
|
||||||
const char *v;
|
const char *v;
|
||||||
if (!skip_prefix(author, "Author: ", &v) &&
|
if (!skip_prefix(author.buf, "Author: ", &v) &&
|
||||||
!skip_prefix(author, "author ", &v))
|
!skip_prefix(author.buf, "author ", &v))
|
||||||
continue;
|
continue;
|
||||||
while (fgets(oneline, sizeof(oneline), stdin) &&
|
while (strbuf_getline(&oneline, stdin, '\n') != EOF &&
|
||||||
oneline[0] != '\n')
|
oneline.len)
|
||||||
; /* discard headers */
|
; /* discard headers */
|
||||||
while (fgets(oneline, sizeof(oneline), stdin) &&
|
while (strbuf_getline(&oneline, stdin, '\n') != EOF &&
|
||||||
oneline[0] == '\n')
|
!oneline.len)
|
||||||
; /* discard blanks */
|
; /* discard blanks */
|
||||||
insert_one_record(log, v, oneline);
|
insert_one_record(log, v, oneline.buf);
|
||||||
}
|
}
|
||||||
|
strbuf_release(&author);
|
||||||
|
strbuf_release(&oneline);
|
||||||
}
|
}
|
||||||
|
|
||||||
void shortlog_add_commit(struct shortlog *log, struct commit *commit)
|
void shortlog_add_commit(struct shortlog *log, struct commit *commit)
|
||||||
|
Loading…
Reference in New Issue
Block a user