replace unchecked snprintf calls with heap buffers
We'd prefer to avoid unchecked snprintf calls because truncation can lead to unexpected results. These are all cases where truncation shouldn't ever happen, because the input to snprintf is fixed in size. That makes them candidates for xsnprintf(), but it's simpler still to just use the heap, and then nobody has to wonder if "100" is big enough. We'll use xstrfmt() where possible, and a strbuf when we need the resulting size or to reuse the same buffer in a loop. Signed-off-by: Jeff King <peff@peff.net>
This commit is contained in:

committed by
Junio C Hamano

parent
446d5d9112
commit
5b1ef2cef4
8
bisect.c
8
bisect.c
@ -200,6 +200,7 @@ static struct commit_list *best_bisection_sorted(struct commit_list *list, int n
|
||||
{
|
||||
struct commit_list *p;
|
||||
struct commit_dist *array = xcalloc(nr, sizeof(*array));
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
int cnt, i;
|
||||
|
||||
for (p = list, cnt = 0; p; p = p->next) {
|
||||
@ -217,17 +218,18 @@ static struct commit_list *best_bisection_sorted(struct commit_list *list, int n
|
||||
}
|
||||
QSORT(array, cnt, compare_commit_dist);
|
||||
for (p = list, i = 0; i < cnt; i++) {
|
||||
char buf[100]; /* enough for dist=%d */
|
||||
struct object *obj = &(array[i].commit->object);
|
||||
|
||||
snprintf(buf, sizeof(buf), "dist=%d", array[i].distance);
|
||||
add_name_decoration(DECORATION_NONE, buf, obj);
|
||||
strbuf_reset(&buf);
|
||||
strbuf_addf(&buf, "dist=%d", array[i].distance);
|
||||
add_name_decoration(DECORATION_NONE, buf.buf, obj);
|
||||
|
||||
p->item = array[i].commit;
|
||||
p = p->next;
|
||||
}
|
||||
if (p)
|
||||
p->next = NULL;
|
||||
strbuf_release(&buf);
|
||||
free(array);
|
||||
return list;
|
||||
}
|
||||
|
Reference in New Issue
Block a user