git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
Jeff King <peff@peff.net>
Date
May 22, 2012, 04:32 UTC
Message-ID
<20120522043221.GA6859@sigill.intra.peff.net>
In-Reply-To
<CAGyf7-G3nNTTP1bKdd9HLKEn-8+LoxCeY2R08x9gKZwS0L_N6g@mail.gmail.com>
On Mon, May 21, 2012 at 06:01:50PM +1000, Bryan Turner wrote:
Show 10 quoted lines
> 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.

Show 10 quoted lines
> ================================ Output =====================================
> aphrael:qa-resources.git bturner$ git cat-file -p
> 5c1ccdec5f84aa149a4978f729fdda70769f942f
> tree dd173cb70baaac07bdf405f4e3db110e7fafd180
> parent 02c78bc39ac6192623bf080e3e2ac892a4f5764c
> author a <farmas@atlassian.com> 1327876222 +1100
> committer a <farmas@atlassian.com> 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
Previous: Bryan TurnerNext: Jeff King
Message 2 of 6 in “git rev-list %an, %ae, %at bug in v1.7.10.1 and beyond”
  1. Bryan TurnerMay 21, 2012
  2. Jeff KingMay 22, 2012
  3. Jeff KingMay 22, 2012
  4. Bryan TurnerMay 22, 2012
  5. Jeff KingMay 22, 2012
  6. Jeff KingMay 22, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.