Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
index-pack: use strip_suffix to avoid magic numbers
author
Jeff King
<peff@peff.net>
Mon, 30 Jun 2014 16:59:10 +0000
(12:59 -0400)
committer
Junio C Hamano
<gitster@pobox.com>
Mon, 30 Jun 2014 20:43:17 +0000
(13:43 -0700)
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 <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/index-pack.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
26936bf
)
diff --git
a/builtin/index-pack.c
b/builtin/index-pack.c
index 46376b6af72cba3eba121a83c5b6104b327023b0..d4b77fd1285a4305341a358386b05434fab7e5e9 100644
(file)
--- a/
builtin/index-pack.c
+++ b/
builtin/index-pack.c
@@
-1505,7
+1505,8
@@
int cmd_index_pack(int argc, const char **argv, const char *prefix)
const char *curr_index;
const char *index_name = NULL, *pack_name = NULL;
const char *keep_name = NULL, *keep_msg = NULL;
const char *curr_index;
const char *index_name = NULL, *pack_name = NULL;
const char *keep_name = NULL, *keep_msg = NULL;
- char *index_name_buf = NULL, *keep_name_buf = NULL;
+ struct strbuf index_name_buf = STRBUF_INIT,
+ keep_name_buf = STRBUF_INIT;
struct pack_idx_entry **idx_objects;
struct pack_idx_option opts;
unsigned char pack_sha1[20];
struct pack_idx_entry **idx_objects;
struct pack_idx_option opts;
unsigned char pack_sha1[20];
@@
-1602,24
+1603,22
@@
int cmd_index_pack(int argc, const char **argv, const char *prefix)
if (fix_thin_pack && !from_stdin)
die(_("--fix-thin cannot be used without --stdin"));
if (!index_name && pack_name) {
if (fix_thin_pack && !from_stdin)
die(_("--fix-thin cannot be used without --stdin"));
if (!index_name && pack_name) {
-
int len = strlen(pack_name)
;
- if (!
ends_with(pack_name, ".pack"
))
+
size_t len
;
+ if (!
strip_suffix(pack_name, ".pack", &len
))
die(_("packfile name '%s' does not end with '.pack'"),
pack_name);
die(_("packfile name '%s' does not end with '.pack'"),
pack_name);
- index_name_buf = xmalloc(len);
- memcpy(index_name_buf, pack_name, len - 5);
- strcpy(index_name_buf + len - 5, ".idx");
- index_name = index_name_buf;
+ strbuf_add(&index_name_buf, pack_name, len);
+ strbuf_addstr(&index_name_buf, ".idx");
+ index_name = index_name_buf.buf;
}
if (keep_msg && !keep_name && pack_name) {
}
if (keep_msg && !keep_name && pack_name) {
-
int len = strlen(pack_name)
;
- if (!
ends_with(pack_name, ".pack"
))
+
size_t len
;
+ if (!
strip_suffix(pack_name, ".pack", &len
))
die(_("packfile name '%s' does not end with '.pack'"),
pack_name);
die(_("packfile name '%s' does not end with '.pack'"),
pack_name);
- keep_name_buf = xmalloc(len);
- memcpy(keep_name_buf, pack_name, len - 5);
- strcpy(keep_name_buf + len - 5, ".keep");
- keep_name = keep_name_buf;
+ strbuf_add(&keep_name_buf, pack_name, len);
+ strbuf_addstr(&keep_name_buf, ".idx");
+ keep_name = keep_name_buf.buf;
}
if (verify) {
if (!index_name)
}
if (verify) {
if (!index_name)
@@
-1667,8
+1666,8
@@
int cmd_index_pack(int argc, const char **argv, const char *prefix)
else
close(input_fd);
free(objects);
else
close(input_fd);
free(objects);
-
free(
index_name_buf);
-
free(
keep_name_buf);
+
strbuf_release(&
index_name_buf);
+
strbuf_release(&
keep_name_buf);
if (pack_name == NULL)
free((void *) curr_pack);
if (index_name == NULL)
if (pack_name == NULL)
free((void *) curr_pack);
if (index_name == NULL)