threads / discuss / 27502

tag format and tests

Subject: tag format and tests

## tl;dr

3 messages between May 30, 2011 and May 30, 2011.

replies: 2people: 2as markdown or json

David Glesser· May 30, 2011, 14:12 UTC · lore
Hello,

We are currently coding a minimal git client using libgit2. We use git tests to test our git client. We have an error caused by the tag format used by libgit2. The test t1006-cat-file.sh report many errors, the first one is: not ok - 23 Size of tag is correct This error comes from libgit2 and how it writes the timestamp, see below:

$ cat tag && echo object 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689 type blob tag hellotag tagger SpongeBob <spongebob.square@crusty-crabs.com> 0000000000 +0000

cheeseburger $ git mktag < tag 7eade44ddd1b9ee24a44e0b2dde2561efea7f7d6 $ echo 7eade44ddd1b9ee24a44e0b2dde2561efea7f7d6 | git cat-file --batch 7eade44ddd1b9ee24a44e0b2dde2561efea7f7d6 tag 154 object 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689 type blob tag hellotag tagger SpongeBob <spongebob.square@crusty-crabs.com> 0000000000 +0000

cheeseburger
And now using libgit2 :

$ git2 mktag < tag 49bc784cd2071c97a14841b3eab1181dd1c8fbcd $ echo 49bc784cd2071c97a14841b3eab1181dd1c8fbcd | git cat-file --batch 49bc784cd2071c97a14841b3eab1181dd1c8fbcd tag 145 object 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689 type blob tag hellotag tagger SpongeBob <spongebob.square@crusty-crabs.com> 0 +0000

cheeseburger

Both formats are accepted by git. It's reasonable to say that the test is wrong because it doesn't fit exactly with the format ?

David G.
Jeff King· May 30, 2011, 16:02 UTC · re: David Glesser · lore

Re: tag format and tests

On Mon, May 30, 2011 at 04:12:30PM +0200, David Glesser wrote:
Show 35 quoted lines
> This error comes from libgit2 and how it writes the timestamp, see below:
> 
> $ cat tag && echo
> object 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
> type blob
> tag hellotag
> tagger SpongeBob <spongebob.square@crusty-crabs.com> 0000000000 +0000
> 
> cheeseburger
> $ git mktag < tag
> 7eade44ddd1b9ee24a44e0b2dde2561efea7f7d6
> $ echo 7eade44ddd1b9ee24a44e0b2dde2561efea7f7d6 | git cat-file --batch
> 7eade44ddd1b9ee24a44e0b2dde2561efea7f7d6 tag 154
> object 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
> type blob
> tag hellotag
> tagger SpongeBob <spongebob.square@crusty-crabs.com> 0000000000 +0000
> 
> cheeseburger
> 
> 
> And now using libgit2 :
> 
> $ git2 mktag < tag
> 49bc784cd2071c97a14841b3eab1181dd1c8fbcd
> $ echo 49bc784cd2071c97a14841b3eab1181dd1c8fbcd | git cat-file --batch
> 49bc784cd2071c97a14841b3eab1181dd1c8fbcd tag 145
> object 5e1c309dae7f45e0f39b1bf3ac3cd9db12e7d689
> type blob
> tag hellotag
> tagger SpongeBob <spongebob.square@crusty-crabs.com> 0 +0000
> 
> cheeseburger
> 
> Both formats are accepted by git.

Yes, both are valid timestamps. And git itself, when creating a tag via "git tag", will not write silly leading zeroes. But in this test, we are using mktag, which is creating a tag object from already-formatted input. So the question is not whether the date-formatting is a problem, but rather whether mktag should do be doing _any_ modification or canonicalization of its input at all.

And I think the answer is "no", because we may be handing gpg-signed contents to mktag, and any change could invalidate that signature. So libgit2 is wrong to munge the data.

I imagine your code parses the buffer into a tag object, checks that it parsed properly, then writes out that object. I think instead you need to parse the buffer into a tag object, check that it parsed, and then write the _original_ buffer into a tag object.

-Peff
David Glesser· May 30, 2011, 16:09 UTC · re: Jeff King · lore

Re: tag format and tests

On Mon, 30 May 2011 12:02:03 -0400, Jeff King <peff@peff.net> wrote:
> And I think the answer is "no", because we may be handing gpg-signed
> contents to mktag, and any change could invalidate that signature. So
> libgit2 is wrong to munge the data.
Ok, I will patch libgit2.
> I imagine your code parses the buffer into a tag object, checks that it
> parsed properly, then writes out that object.
Exactly !
Thanks for your answer.
David G.

← back to recent threads