threads / discuss / 29264

git-log --pretty=format:'[%x00]%w(0,0,1)' doesn't print NUL and "]"

Subject: git-log --pretty=format:'[%x00]%w(0,0,1)' doesn't print NUL and "]"

## tl;dr

2 messages between Dec 29, 2011 and Dec 29, 2011.

replies: 1people: 2as markdown or json

Tanaka Akira· Dec 29, 2011, 18:41 UTC · lore
I found that git-log doesn't print characters in --pretty option as follows.
  % git log --pretty=format:'[%x00]%w(0,0,1)' |od -c
  0000000   [  \n   [  \n   [  \n   [  \n   [  \n   [  \n   [  \n   [  \n
  *
  0022320   [  \n   [  \n   [  \n   [
  0022327
I think NUL and "]" should be printed.

Note that git log works as I expected if I use %w(0,0,0) instead of %w(0,0,1), I don't use %w(0,0,1) or I use %x01 instead of %x00.

  % git log --pretty=format:'[%x00]%w(0,0,0)' |od -c
  0000000   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]  \n
  *
  0044640   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]
  0044657
  % git log --pretty=format:'[%x00]' |od -c
  0000000   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]  \n
  *
  0044640   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]  \n   [  \0   ]
  0044657
  % git log --pretty=format:'[%x01]%w(0,0,1)' |od -c
  0000000   [ 001   ]  \n   [ 001   ]  \n   [ 001   ]  \n   [ 001   ]  \n
  *
  0044640   [ 001   ]  \n   [ 001   ]  \n   [ 001   ]  \n   [ 001   ]
  0044657
I used git 1.7.8.2.
  % git --version
  git version 1.7.8.2
-- 
Tanaka Akira
Jeff King· Dec 29, 2011, 19:23 UTC · re: Tanaka Akira · lore

Re: git-log --pretty=format:'[%x00]%w(0,0,1)' doesn't print NUL and "]"

On Fri, Dec 30, 2011 at 03:41:20AM +0900, Tanaka Akira wrote:
Show 9 quoted lines
> I found that git-log doesn't print characters in --pretty option as follows.
> 
>   % git log --pretty=format:'[%x00]%w(0,0,1)' |od -c
>   0000000   [  \n   [  \n   [  \n   [  \n   [  \n   [  \n   [  \n   [  \n
>   *
>   0022320   [  \n   [  \n   [  \n   [
>   0022327
> 
> I think NUL and "]" should be printed.

I think there is a bug in strbuf_add_indented_text, which uses strchrnul, even though a strbuf may contain literal NULs. Although one could argue that trying to wrap a NUL is questionable (after all, what is its character width?), the current behavior seems pretty wrong.

I think the whole wrapping callchain needs to be adjusted to handle arbitrary bytes (there are also several checks in strbuf_add_wrapped_text for NUL terminators).

-Peff

← back to recent threads