[PATCH 4/5] commit -S: avoid invalid pointer with empty message
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Jun 29, 2016, 14:14 UTC
- Message-ID
- <51b87a251ac80177ff7321ec0e182cbda6dd93a1.1467209576.git.johannes.schindelin@gmx.de>
- In-Reply-To
- <cover.1467209576.git.johannes.schindelin@gmx.de>
While it is not recommended, `git fsck` says that:
Not having a body is not a crime [...]
... which means that we cannot assume that the commit buffer contains an empty line to separate header from body (essentially saying that there is only a header).
So let's tread carefully here.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> --- commit.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/commit.c b/commit.c index 24d4715..0bb51a2 100644 --- a/commit.c +++ b/commit.c @@ -1090,11 +1090,15 @@ static const int gpg_sig_header_len = sizeof(gpg_sig_header) - 1; static int do_sign_commit(struct strbuf *buf, const char *keyid) { + const char *eoh = strstr(buf->buf, "\n\n"); struct strbuf sig = STRBUF_INIT; int inspos, copypos; /* find the end of the header */ - inspos = strstr(buf->buf, "\n\n") - buf->buf + 1; + if (!eoh) + inspos = buf->len; + else + inspos = eoh - buf->buf + 1; if (!keyid || !*keyid) keyid = get_signing_key();
-- 2.9.0.270.g810e421