While at it, check if current notes are blobs before using them. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- builtin/notes.c | 9 ++++++++- t/t3301-notes.sh | 4 ++++ 2 files changed, 12 insertions(+), 1 deletions(-) diff --git a/builtin/notes.c b/builtin/notes.c index 3644d14..5f276fc 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -114,6 +114,8 @@ static void write_note_data(int fd, const unsigned char *sha1) enum object_type type; char *buf = read_sha1_file(sha1, &type, &size); if (buf) { + if (type != OBJ_BLOB) + die(_("note %s is not a blob"), sha1_to_hex(sha1)); if (size) write_or_die(fd, buf, size); free(buf); @@ -201,8 +203,11 @@ static void create_note(const unsigned char *object, struct msg_arg *msg, strbuf_grow(&(msg->buf), size + 1); if (msg->buf.len && prev_buf && size) strbuf_insert(&(msg->buf), 0, "\n", 1); - if (prev_buf && size) + if (prev_buf && size) { + if (type != OBJ_BLOB) + die(_("note %s is not a blob"), sha1_to_hex(prev)); strbuf_insert(&(msg->buf), 0, prev_buf, size); + } free(prev_buf); } @@ -274,6 +279,8 @@ static int parse_reuse_arg(const struct option *opt, const char *arg, int unset) free(buf); die(_("Failed to read object '%s'."), arg);; } + if (type != OBJ_BLOB) + die(_("%s is not a blob, invalid for notes"), sha1_to_hex(object)); strbuf_add(&(msg->buf), buf, len); free(buf); diff --git a/t/t3301-notes.sh b/t/t3301-notes.sh index 16de05a..8c72755 100755 --- a/t/t3301-notes.sh +++ b/t/t3301-notes.sh @@ -1222,4 +1222,8 @@ test_expect_success 'git notes get-ref (--ref)' ' test "$(GIT_NOTES_REF=refs/notes/bar git notes --ref=baz get-ref)" = "refs/notes/baz" ' +test_expect_success 'non-blobs cannot be notes' ' + test_must_fail git notes add -f -C HEAD^{tree} +' + test_done -- 1.7.8.36.g69ee2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html