Skip to content

Commit 592ce20

Browse files
peffgitster
authored andcommitted
index-pack: use strip_suffix to avoid magic numbers
We also switch to using strbufs, which lets us avoid the potentially dangerous combination of a manual malloc followed by a strcpy. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 26936bf commit 592ce20

File tree

1 file changed

+14
-15
lines changed

1 file changed

+14
-15
lines changed

builtin/index-pack.c

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1505,7 +1505,8 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
15051505
const char *curr_index;
15061506
const char *index_name = NULL, *pack_name = NULL;
15071507
const char *keep_name = NULL, *keep_msg = NULL;
1508-
char *index_name_buf = NULL, *keep_name_buf = NULL;
1508+
struct strbuf index_name_buf = STRBUF_INIT,
1509+
keep_name_buf = STRBUF_INIT;
15091510
struct pack_idx_entry **idx_objects;
15101511
struct pack_idx_option opts;
15111512
unsigned char pack_sha1[20];
@@ -1602,24 +1603,22 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
16021603
if (fix_thin_pack && !from_stdin)
16031604
die(_("--fix-thin cannot be used without --stdin"));
16041605
if (!index_name && pack_name) {
1605-
int len = strlen(pack_name);
1606-
if (!ends_with(pack_name, ".pack"))
1606+
size_t len;
1607+
if (!strip_suffix(pack_name, ".pack", &len))
16071608
die(_("packfile name '%s' does not end with '.pack'"),
16081609
pack_name);
1609-
index_name_buf = xmalloc(len);
1610-
memcpy(index_name_buf, pack_name, len - 5);
1611-
strcpy(index_name_buf + len - 5, ".idx");
1612-
index_name = index_name_buf;
1610+
strbuf_add(&index_name_buf, pack_name, len);
1611+
strbuf_addstr(&index_name_buf, ".idx");
1612+
index_name = index_name_buf.buf;
16131613
}
16141614
if (keep_msg && !keep_name && pack_name) {
1615-
int len = strlen(pack_name);
1616-
if (!ends_with(pack_name, ".pack"))
1615+
size_t len;
1616+
if (!strip_suffix(pack_name, ".pack", &len))
16171617
die(_("packfile name '%s' does not end with '.pack'"),
16181618
pack_name);
1619-
keep_name_buf = xmalloc(len);
1620-
memcpy(keep_name_buf, pack_name, len - 5);
1621-
strcpy(keep_name_buf + len - 5, ".keep");
1622-
keep_name = keep_name_buf;
1619+
strbuf_add(&keep_name_buf, pack_name, len);
1620+
strbuf_addstr(&keep_name_buf, ".idx");
1621+
keep_name = keep_name_buf.buf;
16231622
}
16241623
if (verify) {
16251624
if (!index_name)
@@ -1667,8 +1666,8 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
16671666
else
16681667
close(input_fd);
16691668
free(objects);
1670-
free(index_name_buf);
1671-
free(keep_name_buf);
1669+
strbuf_release(&index_name_buf);
1670+
strbuf_release(&keep_name_buf);
16721671
if (pack_name == NULL)
16731672
free((void *) curr_pack);
16741673
if (index_name == NULL)

0 commit comments

Comments
 (0)