Thomas Rast <trast@xxxxxxxxxxx> writes: > From a cursory glance it looks like it's actually an existing bug in > read_revisions_from_stdin or handle_revision_arg, depending on which way > you look at it. read_revisions_from_stdin passes its temporary buffer > down to handle_revision_arg: > > struct strbuf sb; > [...] > strbuf_init(&sb, 1000); > while (strbuf_getwholeline(&sb, stdin, '\n') != EOF) { > [...] > if (handle_revision_arg(sb.buf, revs, 0, REVARG_CANNOT_BE_FILENAME)) > die("bad revision '%s'", sb.buf); > } > > But handle_revision_arg ends up just stuffing that parameter into the > revision-walker options via some helpers: > > add_rev_cmdline(revs, object, arg_, REV_CMD_REV, flags ^ local_flags); > add_pending_object_with_mode(revs, object, arg, oc.mode); > > This seems to have been lurking since 281eee4 (revision: keep track of > the end-user input from the command line, 2011-08-25). > > Junio, at which level should we fix it? We could of course have > read_revisions_from_stdin make a copy of the buffers it passes > down, but perhaps it would be less surprising to instead have > handle_revision_arg make sure it makes a copy of everything it > "keeps"? That sounds like the right way to go to me. > The easy fix of course is just this: > > diff --git i/revision.c w/revision.c > index 3a20c96..181a8db 100644 > --- i/revision.c > +++ w/revision.c > @@ -1277,7 +1277,8 @@ static void read_revisions_from_stdin(struct rev_info *revs, > } > die("options not supported in --stdin mode"); > } > - if (handle_revision_arg(sb.buf, revs, 0, REVARG_CANNOT_BE_FILENAME)) > + if (handle_revision_arg(xstrdup(sb.buf), revs, 0, > + REVARG_CANNOT_BE_FILENAME)) > die("bad revision '%s'", sb.buf); > } > if (seen_dashdash) -- 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