Skip to content

Commit 114f986

Browse files
committed
test: ensure malformed actors still round-trip
1 parent c9cbfe1 commit 114f986

File tree

5 files changed

+83
-84
lines changed

5 files changed

+83
-84
lines changed

gix-object/tests/object/commit/from_bytes.rs

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,14 @@ use crate::{
99

1010
#[test]
1111
fn invalid_timestsamp() {
12-
let actor = gix_actor::SignatureRef {
13-
name: b"Name".as_bstr(),
14-
email: b"[email protected]".as_bstr(),
15-
time: "1312735823 +051800",
16-
};
1712
assert_eq!(
1813
CommitRef::from_bytes(&fixture_name("commit", "invalid-timestamp.txt"))
1914
.expect("auto-correct invalid timestamp by discarding it (time is still valid UTC)"),
2015
CommitRef {
2116
tree: b"7989dfb2ec2f41914611a22fb30bbc2b3849df9a".as_bstr(),
2217
parents: [b"8845ae683e2688bc619baade49510c17e978518f".as_bstr()].into(),
23-
author: actor,
24-
committer: actor,
18+
author: b"Name <[email protected]> 1312735823 +051800".as_bstr(),
19+
committer: b"Name <[email protected]> 1312735823 +051800".as_bstr(),
2520
encoding: None,
2621
message: b"edit changelog to mention about x_sendfile_header default change".as_bstr(),
2722
extra_headers: vec![]
@@ -37,19 +32,22 @@ fn invalid_email_of_committer() {
3732
email: b"gh <Gregor Hartmann<[email protected]".as_bstr(),
3833
time: "1282910542 +0200",
3934
};
35+
let backing = fixture_name("commit", "invalid-actor.txt");
36+
let commit = CommitRef::from_bytes(&backing).expect("ignore strangely formed actor format");
4037
assert_eq!(
41-
CommitRef::from_bytes(&fixture_name("commit", "invalid-actor.txt"))
42-
.expect("ignore strangely formed actor format"),
38+
commit,
4339
CommitRef {
4440
tree: b"220738fd4199e95a2b244465168366a73ebdf271".as_bstr(),
4541
parents: [b"209fbe2d632761b30b7b17422914e11b93692833".as_bstr()].into(),
46-
author: actor,
47-
committer: actor,
42+
author: b"Gregor Hartmann<gh <Gregor Hartmann<[email protected]>> 1282910542 +0200".as_bstr(),
43+
committer: b"Gregor Hartmann<gh <Gregor Hartmann<[email protected]>> 1282910542 +0200".as_bstr(),
4844
encoding: None,
4945
message: b"build breakers".as_bstr(),
5046
extra_headers: vec![]
5147
}
5248
);
49+
assert_eq!(commit.author(), actor);
50+
assert_eq!(commit.committer(), actor);
5351
}
5452

5553
#[test]
@@ -59,8 +57,8 @@ fn unsigned() -> crate::Result {
5957
CommitRef {
6058
tree: b"1b2dfb4ac5e42080b682fc676e9738c94ce6d54d".as_bstr(),
6159
parents: SmallVec::default(),
62-
author: signature("1592437401 +0800"),
63-
committer: signature("1592437401 +0800"),
60+
author: b"Sebastian Thiel <[email protected]> 1592437401 +0800".as_bstr(),
61+
committer: b"Sebastian Thiel <[email protected]> 1592437401 +0800".as_bstr(),
6462
encoding: None,
6563
message: b"without sig".as_bstr(),
6664
extra_headers: vec![]
@@ -76,8 +74,8 @@ fn whitespace() -> crate::Result {
7674
CommitRef {
7775
tree: b"9bed6275068a0575243ba8409253e61af81ab2ff".as_bstr(),
7876
parents: SmallVec::from(vec![b"26b4df046d1776c123ac69d918f5aec247b58cc6".as_bstr()]),
79-
author: signature("1592448450 +0800"),
80-
committer: signature("1592448450 +0800"),
77+
author: b"Sebastian Thiel <[email protected]> 1592448450 +0800".as_bstr(),
78+
committer: b"Sebastian Thiel <[email protected]> 1592448450 +0800".as_bstr(),
8179
encoding: None,
8280
message: b" nl".as_bstr(), // this one had a \n trailing it, but git seems to trim that
8381
extra_headers: vec![]
@@ -93,8 +91,8 @@ fn signed_singleline() -> crate::Result {
9391
CommitRef {
9492
tree: b"00fc39317701176e326974ce44f5bd545a32ec0b".as_bstr(),
9593
parents: SmallVec::from(vec![b"09d8d3a12e161a7f6afb522dbe8900a9c09bce06".as_bstr()]),
96-
author: signature("1592391367 +0800"),
97-
committer: signature("1592391367 +0800"),
94+
author: b"Sebastian Thiel <[email protected]> 1592391367 +0800".as_bstr(),
95+
committer: b"Sebastian Thiel <[email protected]> 1592391367 +0800".as_bstr(),
9896
encoding: None,
9997
message: b"update tasks\n".as_bstr(),
10098
extra_headers: vec![(b"gpgsig".as_bstr(), b"magic:signature".as_bstr().into())]
@@ -106,24 +104,27 @@ fn signed_singleline() -> crate::Result {
106104
#[test]
107105
fn mergetag() -> crate::Result {
108106
let fixture = fixture_name("commit", "mergetag.txt");
109-
let commit = CommitRef {
107+
let expected = CommitRef {
110108
tree: b"1c61918031bf2c7fab9e17dde3c52a6a9884fcb5".as_bstr(),
111109
parents: SmallVec::from(vec![
112110
b"44ebe016df3aad96e3be8f95ec52397728dd7701".as_bstr(),
113111
b"8d485da0ddee79d0e6713405694253d401e41b93".as_bstr(),
114112
]),
115-
author: linus_signature("1591996221 -0700"),
116-
committer: linus_signature("1591996221 -0700"),
113+
author: b"Linus Torvalds <[email protected]> 1591996221 -0700".as_bstr(),
114+
committer: b"Linus Torvalds <[email protected]> 1591996221 -0700".as_bstr(),
117115
encoding: None,
118116
message: LONG_MESSAGE.as_bytes().as_bstr(),
119117
extra_headers: vec![(
120118
b"mergetag".as_bstr(),
121119
std::borrow::Cow::Owned(MERGE_TAG.as_bytes().into()),
122120
)],
123121
};
124-
assert_eq!(CommitRef::from_bytes(&fixture)?, commit);
122+
let commit = CommitRef::from_bytes(&fixture)?;
123+
assert_eq!(commit, expected);
125124
assert_eq!(commit.extra_headers().find_all("mergetag").count(), 1);
126125
assert_eq!(commit.extra_headers().mergetags().count(), 1);
126+
assert_eq!(commit.author(), linus_signature("1591996221 -0700"));
127+
assert_eq!(commit.committer(), linus_signature("1591996221 -0700"));
127128
Ok(())
128129
}
129130

@@ -134,8 +135,8 @@ fn signed() -> crate::Result {
134135
CommitRef {
135136
tree: b"00fc39317701176e326974ce44f5bd545a32ec0b".as_bstr(),
136137
parents: SmallVec::from(vec![b"09d8d3a12e161a7f6afb522dbe8900a9c09bce06".as_bstr()]),
137-
author: signature("1592391367 +0800"),
138-
committer: signature("1592391367 +0800"),
138+
author: b"Sebastian Thiel <[email protected]> 1592391367 +0800".as_bstr(),
139+
committer: b"Sebastian Thiel <[email protected]> 1592391367 +0800".as_bstr(),
139140
encoding: None,
140141
message: b"update tasks\n".as_bstr(),
141142
extra_headers: vec![(b"gpgsig".as_bstr(), b"-----BEGIN PGP SIGNATURE-----\n\niQEzBAABCAAdFiEEdjYp/sh4j8NRKLX27gKdHl60AwAFAl7p9tgACgkQ7gKdHl60\nAwBpegf+KQciv9AOIN7+yPmowecGxBnSfpKWTDzFxnyGR8dq63SpWT8WEKG5mf3a\nG6iUqpsDWaMHlzihaMKRvgRpZxFRbjnNPFBj6F4RRqfE+5R7k6DRSLUV5PqnsdSH\nuccfIDWi1imhsm7AaP5trwl1t+83U2JhHqPcPVFLMODYwWeO6NLR/JCzGSTQRa8t\nRgaVMKI19O/fge5OT5Ua8D47VKEhsJX0LfmkP5RfZQ8JJvNd40TupqKRdlv0sAzP\nya7NXkSHXCavHNR6kA+KpWxn900UoGK8/IDlwU6MeOkpPVawb3NFMqnc7KJDaC2p\nSMzpuEG8LTrCx2YSpHNLqHyzvQ1CZA==\n=5ITV\n-----END PGP SIGNATURE-----\n".as_bstr().into())]
@@ -151,8 +152,8 @@ fn signed_with_encoding() -> crate::Result {
151152
CommitRef {
152153
tree: b"1973afa74d87b2bb73fa884aaaa8752aec43ea88".as_bstr(),
153154
parents: SmallVec::from(vec![b"79c51cc86923e2b8ca0ee5c4eb75e48027133f9a".as_bstr()]),
154-
author: signature("1592448995 +0800"),
155-
committer: signature("1592449083 +0800"),
155+
author: b"Sebastian Thiel <[email protected]> 1592448995 +0800".as_bstr(),
156+
committer: b"Sebastian Thiel <[email protected]> 1592449083 +0800".as_bstr(),
156157
encoding: Some(b"ISO-8859-1".as_bstr()),
157158
message: b"encoding & sig".as_bstr(),
158159
extra_headers: vec![(b"gpgsig".as_bstr(), SIGNATURE.as_bstr().into())]
@@ -168,8 +169,8 @@ fn with_encoding() -> crate::Result {
168169
CommitRef {
169170
tree: b"4a1c03029e7407c0afe9fc0320b3258e188b115e".as_bstr(),
170171
parents: SmallVec::from(vec![b"7ca98aad461a5c302cb4c9e3acaaa6053cc67a62".as_bstr()]),
171-
author: signature("1592438199 +0800"),
172-
committer: signature("1592438199 +0800"),
172+
author: b"Sebastian Thiel <[email protected]> 1592438199 +0800".as_bstr(),
173+
committer: b"Sebastian Thiel <[email protected]> 1592438199 +0800".as_bstr(),
173174
encoding: Some("ISO-8859-1".into()),
174175
message: b"commit with encoding".as_bstr(),
175176
extra_headers: vec![]
@@ -180,18 +181,13 @@ fn with_encoding() -> crate::Result {
180181

181182
#[test]
182183
fn pre_epoch() -> crate::Result {
183-
let signature = || SignatureRef {
184-
name: "Législateur".into(),
185-
email: "".into(),
186-
time: "-5263834140 +0009",
187-
};
188184
assert_eq!(
189185
CommitRef::from_bytes(&fixture_name("commit", "pre-epoch.txt"))?,
190186
CommitRef {
191187
tree: b"71cdd4015386b764b178005cad4c88966bc9d61a".as_bstr(),
192188
parents: SmallVec::default(),
193-
author: signature(),
194-
committer: signature(),
189+
author: "Législateur <> -5263834140 +0009".as_bytes().as_bstr(),
190+
committer: "Législateur <> -5263834140 +0009".as_bytes().as_bstr(),
195191
encoding: None,
196192
message: "Version consolidée au 14 mars 1803\n".into(),
197193
extra_headers: vec![]
@@ -202,18 +198,13 @@ fn pre_epoch() -> crate::Result {
202198

203199
#[test]
204200
fn double_dash_special_time_offset() -> crate::Result {
205-
let signature = || SignatureRef {
206-
name: "name".into(),
207-
email: "[email protected]".into(),
208-
time: "1288373970 --700",
209-
};
210201
assert_eq!(
211202
CommitRef::from_bytes(&fixture_name("commit", "double-dash-date-offset.txt"))?,
212203
CommitRef {
213204
tree: b"0a851d7a2a66084ab10516c406a405d147e974ad".as_bstr(),
214205
parents: SmallVec::from(vec![b"31350f4f0f459485eff2131517e3450cf251f6fa".as_bstr()]),
215-
author: signature(),
216-
committer: signature(),
206+
author: "name <[email protected]> 1288373970 --700".as_bytes().as_bstr(),
207+
committer: "name <[email protected]> 1288373970 --700".as_bytes().as_bstr(),
217208
encoding: None,
218209
message: "msg\n".into(),
219210
extra_headers: vec![]
@@ -236,8 +227,8 @@ fn with_trailer() -> crate::Result {
236227
CommitRef {
237228
tree: b"25a19c29c5e36884c1ad85d8faf23f1246b7961b".as_bstr(),
238229
parents: SmallVec::from(vec![b"699ae71105dddfcbb9711ed3a92df09e91a04e90".as_bstr()]),
239-
author: kim,
240-
committer: kim,
230+
author: "Kim Altintop <kim@eagain.st> 1631514803 +0200".as_bytes().as_bstr(),
231+
committer: "Kim Altintop <kim@eagain.st> 1631514803 +0200".as_bytes().as_bstr(),
241232
encoding: None,
242233
message: b"test: use gitoxide for link-git-protocol tests
243234
@@ -253,6 +244,8 @@ Signed-off-by: Kim Altintop <[email protected]>"
253244
extra_headers: vec![(b"gpgsig".as_bstr(), b"-----BEGIN PGP SIGNATURE-----\n\niHUEABYIAB0WIQSuZwcGWSQItmusNgR5URpSUCnwXQUCYT7xpAAKCRB5URpSUCnw\nXWB3AP9q323HlxnI8MyqszNOeYDwa7Y3yEZaUM2y/IRjz+z4YQEAq0yr1Syt3mrK\nOSFCqL2vDm3uStP+vF31f6FnzayhNg0=\n=Mhpp\n-----END PGP SIGNATURE-----\n".as_bstr().into())]
254245
}
255246
);
247+
assert_eq!(commit.author(), kim);
248+
assert_eq!(commit.committer(), kim);
256249
let message = commit.message();
257250
assert_eq!(message.title, "test: use gitoxide for link-git-protocol tests");
258251
assert_eq!(
@@ -316,8 +309,8 @@ fn merge() -> crate::Result {
316309
b"6a6054db4ce3c1e4e6a37f8c4d7acb63a4d6ad71".as_bstr(),
317310
b"c91d592913d47ac4e4a76daf16fd649b276e211e".as_bstr()
318311
]),
319-
author: signature("1592454703 +0800"),
320-
committer: signature("1592454738 +0800"),
312+
author: b"Sebastian Thiel <[email protected]> 1592454703 +0800".as_bstr(),
313+
committer: b"Sebastian Thiel <[email protected]> 1592454738 +0800".as_bstr(),
321314
encoding: Some("ISO-8859-1".into()),
322315
message: b"Merge branch 'branch'".as_bstr(),
323316
extra_headers: vec![]
@@ -366,3 +359,12 @@ fn bogus_multi_gpgsig_header() -> crate::Result {
366359
);
367360
Ok(())
368361
}
362+
363+
#[test]
364+
fn author_method_returns_trimmed_signature() -> crate::Result {
365+
let backing = fixture_name("commit", "unsigned.txt");
366+
let commit = CommitRef::from_bytes(&backing)?;
367+
assert_eq!(commit.author(), signature("1592437401 +0800"));
368+
assert_eq!(commit.committer(), signature("1592437401 +0800"));
369+
Ok(())
370+
}

gix-object/tests/object/commit/message.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,8 +241,8 @@ mod summary {
241241
CommitRef {
242242
tree: "tree".into(),
243243
parents: Default::default(),
244-
author: actor,
245-
committer: actor,
244+
author: "name <email> 0 0000".as_bytes().as_bstr(),
245+
committer: "name <email> 0 0000".as_bytes().as_bstr(),
246246
encoding: None,
247247
message: input.as_bstr(),
248248
extra_headers: vec![]
@@ -251,6 +251,17 @@ mod summary {
251251
summary,
252252
"both versions create the same result"
253253
);
254+
let commit = CommitRef {
255+
tree: "tree".into(),
256+
parents: Default::default(),
257+
author: "name <email> 0 0000".as_bytes().as_bstr(),
258+
committer: "name <email> 0 0000".as_bytes().as_bstr(),
259+
encoding: None,
260+
message: input.as_bstr(),
261+
extra_headers: vec![],
262+
};
263+
assert_eq!(commit.author(), actor);
264+
assert_eq!(commit.committer(), actor);
254265
summary
255266
}
256267

gix-object/tests/object/tag/mod.rs

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::fixture_name;
44

55
mod method {
66
use bstr::ByteSlice;
7-
use gix_date::parse::TimeBuf;
87
use gix_object::TagRef;
98
use pretty_assertions::assert_eq;
109

@@ -28,8 +27,8 @@ mod method {
2827
assert_eq!(target.to_string(), tag.target);
2928
assert_eq!(target_kind, tag.target_kind);
3029
assert_eq!(name, tag.name);
31-
let mut buf = TimeBuf::default();
32-
assert_eq!(tagger.as_ref().map(|s| s.to_ref(&mut buf)), tag.tagger);
30+
let parsed = tag.tagger().map(Into::into);
31+
assert_eq!(tagger, parsed);
3332
assert_eq!(message, tag.message);
3433
assert_eq!(pgp_signature.as_ref().map(|s| s.as_bstr()), tag.pgp_signature);
3534
Ok(())
@@ -154,7 +153,6 @@ fn invalid() {
154153
}
155154

156155
mod from_bytes {
157-
use gix_actor::SignatureRef;
158156
use gix_object::{bstr::ByteSlice, Kind, TagRef, WriteTo};
159157

160158
use crate::{fixture_name, signature, tag::tag_fixture};
@@ -176,7 +174,7 @@ mod from_bytes {
176174
name: b"empty".as_bstr(),
177175
target_kind: Kind::Commit,
178176
message: b"\n".as_bstr(),
179-
tagger: Some(signature("1592381636 +0800")),
177+
tagger: Some(b"Sebastian Thiel <[email protected]> 1592381636 +0800".as_bstr()),
180178
pgp_signature: None
181179
}
182180
);
@@ -195,7 +193,7 @@ mod from_bytes {
195193
name: b"empty".as_bstr(),
196194
target_kind: Kind::Commit,
197195
message: b"".as_bstr(),
198-
tagger: Some(signature("1592381636 +0800")),
196+
tagger: Some(b"Sebastian Thiel <[email protected]> 1592381636 +0800".as_bstr()),
199197
pgp_signature: None
200198
}
201199
);
@@ -212,7 +210,7 @@ mod from_bytes {
212210
name: b"baz".as_bstr(),
213211
target_kind: Kind::Commit,
214212
message: b"hello\n\nworld".as_bstr(),
215-
tagger: Some(signature("1592311808 +0800")),
213+
tagger: Some(b"Sebastian Thiel <[email protected]> 1592311808 +0800".as_bstr()),
216214
pgp_signature: None
217215
}
218216
);
@@ -260,7 +258,7 @@ KLMHist5yj0sw1E4hDTyQa0=
260258
name: b"whitespace".as_bstr(),
261259
target_kind: Kind::Commit,
262260
message: b" \ttab\nnewline\n\nlast-with-trailer\n".as_bstr(),
263-
tagger: Some(signature("1592382888 +0800")),
261+
tagger: Some(b"Sebastian Thiel <[email protected]> 1592382888 +0800".as_bstr()),
264262
pgp_signature: None
265263
}
266264
);
@@ -276,16 +274,20 @@ KLMHist5yj0sw1E4hDTyQa0=
276274
name: b"ChangeLog".as_bstr(),
277275
target_kind: Kind::Commit,
278276
message: b"".as_bstr(),
279-
tagger: Some(SignatureRef {
280-
name: b"shemminger".as_bstr(),
281-
email: b"shemminger".as_bstr(),
282-
time: "",
283-
}),
277+
tagger: Some(b"shemminger <shemminger>".as_bstr()),
284278
pgp_signature: None
285279
}
286280
);
287281
Ok(())
288282
}
283+
284+
#[test]
285+
fn tagger_method_returns_signature() -> crate::Result {
286+
let fixture = fixture_name("tag", "empty.txt");
287+
let tag = TagRef::from_bytes(&fixture)?;
288+
assert_eq!(tag.tagger(), Some(signature("1592381636 +0800")));
289+
Ok(())
290+
}
289291
}
290292

291293
fn tag_fixture() -> TagRef<'static> {
@@ -314,10 +316,6 @@ cjHJZXWmV4CcRfmLsXzU8s2cR9A0DBvOxhPD1TlKC2JhBFXigjuL9U4Rbq9tdegB
314316
-----END PGP SIGNATURE-----"
315317
.as_bstr(),
316318
),
317-
tagger: Some(gix_actor::SignatureRef {
318-
name: b"Sebastian Thiel".as_bstr(),
319-
email: b"[email protected]".as_bstr(),
320-
time: "1528473343 +0230",
321-
}),
319+
tagger: Some(b"Sebastian Thiel <[email protected]> 1528473343 +0230".as_bstr()),
322320
}
323321
}

0 commit comments

Comments
 (0)