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

2 messages from 2011-12-29 to 2011-12-29. Participants: Tanaka Akira, Jeff King.
Thread: https://gitlist.dev/t/29264

## Tanaka Akira, 2011-12-29 18:41

Subject: git-log --pretty=format:'[%x00]%w(0,0,1)' doesn't print NUL and "]"
Message-ID: <CANjopZFqiy+Ai4u6QYYnza5J7A3NAt-f17yR9AsYok-g3Hbb3w@mail.gmail.com>
URL: https://gitlist.dev/e/CANjopZFqiy%2BAi4u6QYYnza5J7A3NAt-f17yR9AsYok-g3Hbb3w%40mail.gmail.com

```
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, 2011-12-29 19:23

Subject: Re: git-log --pretty=format:'[%x00]%w(0,0,1)' doesn't print NUL and "]"
Message-ID: <20111229192328.GA18723@sigill.intra.peff.net>
URL: https://gitlist.dev/e/20111229192328.GA18723%40sigill.intra.peff.net
In-Reply-To: <CANjopZFqiy+Ai4u6QYYnza5J7A3NAt-f17yR9AsYok-g3Hbb3w@mail.gmail.com>

```
On Fri, Dec 30, 2011 at 03:41:20AM +0900, Tanaka Akira wrote:

> 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

```
