On Wed, Feb 12, 2014 at 4:54 AM, Johan Herland <johan@xxxxxxxxxxx> wrote: > Currently "git notes add -C $object" will read the raw bytes from $object, > and then copy those bytes into the note object, which is hardcoded to be > of type blob. This means that if the given $object is a non-blob (e.g. > tree or commit), the raw bytes from that object is copied into a blob > object. This is probably not useful, and certainly not what any sane > user would expect. So disallow it, by erroring out if the $object passed > to the -C option is not a blob. > > The fix also applies to the -c option (in which the user is prompted to > edit/verify the note contents in a text editor), and also when -c/-C is > passed to "git notes append" (which appends the $object contents to an > existing note object). In both cases, passing a non-blob $object does not > make sense. > > Also add a couple of tests demonstrating expected behavior. > > Suggested-by: Junio C Hamano <gitster@xxxxxxxxx> > Signed-off-by: Johan Herland <johan@xxxxxxxxxxx> > --- > builtin/notes.c | 6 +++++- > t/t3301-notes.sh | 27 +++++++++++++++++++++++++++ > 2 files changed, 32 insertions(+), 1 deletion(-) > > diff --git a/builtin/notes.c b/builtin/notes.c > index 2b24d05..bb89930 100644 > --- a/builtin/notes.c > +++ b/builtin/notes.c > @@ -269,7 +269,11 @@ static int parse_reuse_arg(const struct option *opt, const char *arg, int unset) > die(_("Failed to resolve '%s' as a valid ref."), arg); > if (!(buf = read_sha1_file(object, &type, &len)) || !len) { > free(buf); > - die(_("Failed to read object '%s'."), arg);; > + die(_("Failed to read object '%s'."), arg); > + } > + if (type != OBJ_BLOB) { > + free(buf); > + die(_("Cannot read note data from non-blob object '%s'."), arg); The way this diagnostic is worded, it sound as if the 'read' failed rather than that the user specified an incorrect object type. Perhaps "Object is not a blob '%s'" or "Expected blob but '%s' has type '%s'" or something along those lines? > } > strbuf_add(&(msg->buf), buf, len); > free(buf); -- 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