Thread (6 messages) 6 messages, 2 authors, 2016-06-15

Re: git rev-list %an, %ae, %at bug in v1.7.10.1 and beyond

From: Jeff King <hidden>
Date: 2016-06-15 22:53:52

On Mon, May 21, 2012 at 06:01:50PM +1000, Bryan Turner wrote:
Note that the author name, e-mail and timestamp values are all missing
(the three |'s in a row at the end).
[...]
Built from 0dbe6592ccbd1a394a69a52074e3729d546fe952, the parent of
4b340cf, and in previous versions of git (1.7.10 and earlier), I got
output like this:
[...]
Note that the author name, e-mail and timestamp are all present. The
"a" appears as ASCII here, but it's actually a UTF-16LE character (the
terminal on the Mac is being "helpful").
I'm not too surprised this is broken (in fact, I'm surprised it ever
really worked). UTF-16, especially representing pure ascii characters,
will have embedded NULs. Most of the code assumes that things like names
and emails are NUL-terminated and ascii-compatible (so ascii, or some
ascii-superset encoding like utf8, iso8859-1, etc). You can store a
commit message (and name) in utf-16 if you tell git that you are doing
so, but we should be re-encoding it before handling it.
================================ Output =====================================
aphrael:qa-resources.git bturner$ git cat-file -p
5c1ccdec5f84aa149a4978f729fdda70769f942f
tree dd173cb70baaac07bdf405f4e3db110e7fafd180
parent 02c78bc39ac6192623bf080e3e2ac892a4f5764c
author a [off-list ref] 1327876222 +1100
committer a [off-list ref] 1327876222 +1100

commit with unicode name
================================ End ========================================
There's no encoding header, so having a utf-16 character there is wrong.
How did you make such a commit in the first place, though? I believe
that git-commit treats the name as a string and would terminate on a NUL
(or am I wrong in thinking that this "a" is really U+0061, and is
actually some other unicode character that _looks_ like "a", but doesn't
contain a NUL?).

Did you create it by piping straight to git-hash-object? What does
piping the above through "xxd" or "cat -A" show?

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help