create_branch: use xstrfmt for reflog message
authorJeff King <peff@peff.net>
Tue, 28 Mar 2017 19:46:40 +0000 (15:46 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 30 Mar 2017 21:59:50 +0000 (14:59 -0700)
We generate a reflog message that contains some fixed text
plus a branch name, and use a buffer of size PATH_MAX + 20.
This mostly works if you assume that refnames are shorter
than PATH_MAX, but:

1. That's not necessarily true. PATH_MAX is not always the
filesystem's limit.

2. The "20" is not sufficiently large for the fixed text
anyway.

Let's just switch to a heap buffer so we don't have to even
care.

Signed-off-by: Jeff King <peff@peff.net>
branch.c
index 6d0ca94cc79fd52b7cd41c49a2790bcf0e72db5d..ad5a2299ba2600e67c8aaa7719a2c7d54898958f 100644 (file)
--- a/branch.c
+++ b/branch.c
@@ -296,14 +296,12 @@ void create_branch(const char *name, const char *start_name,
        if (!dont_change_ref) {
                struct ref_transaction *transaction;
                struct strbuf err = STRBUF_INIT;
-               char msg[PATH_MAX + 20];
+               char *msg;
 
                if (forcing)
-                       snprintf(msg, sizeof msg, "branch: Reset to %s",
-                                start_name);
+                       msg = xstrfmt("branch: Reset to %s", start_name);
                else
-                       snprintf(msg, sizeof msg, "branch: Created from %s",
-                                start_name);
+                       msg = xstrfmt("branch: Created from %s", start_name);
 
                transaction = ref_transaction_begin(&err);
                if (!transaction ||
@@ -314,6 +312,7 @@ void create_branch(const char *name, const char *start_name,
                        die("%s", err.buf);
                ref_transaction_free(transaction);
                strbuf_release(&err);
+               free(msg);
        }
 
        if (real_ref && track)