Skip to content

Commit 566dc51

Browse files
Merge #1055
1055: Fix HTTP tests and test bad tarballs are rejected r=carols10cents Continuation of #1054
2 parents 00c6c96 + 65ab2c4 commit 566dc51

File tree

155 files changed

+800
-1817
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+800
-1817
lines changed

Cargo.lock

Lines changed: 365 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,11 @@ civet = "0.9"
7474

7575
[dev-dependencies]
7676
conduit-test = "0.8"
77-
bufstream = "0.1"
77+
hyper = "0.11"
78+
hyper-tls = "0.1"
79+
futures = "0.1"
80+
tokio-core = "0.1"
81+
tokio-service = "0.1"
7882

7983
[build-dependencies]
8084
dotenv = "0.10"

src/tests/all.rs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ extern crate serde_derive;
55
extern crate diesel;
66
#[macro_use]
77
extern crate diesel_codegen;
8-
extern crate bufstream;
98
extern crate cargo_registry;
109
extern crate chrono;
1110
extern crate conduit;
@@ -20,6 +19,8 @@ extern crate serde_json;
2019
extern crate time;
2120
extern crate url;
2221
extern crate s3;
22+
extern crate tar;
23+
extern crate flate2;
2324

2425
use std::borrow::Cow;
2526
use std::collections::HashMap;
@@ -43,6 +44,8 @@ use conduit::{Request, Method};
4344
use conduit_test::MockRequest;
4445
use diesel::prelude::*;
4546
use diesel::pg::upsert::*;
47+
use flate2::Compression;
48+
use flate2::write::GzEncoder;
4649

4750
macro_rules! t {
4851
($e:expr) => (
@@ -131,8 +134,8 @@ fn app() -> (record::Bomb, Arc<App>, conduit_middleware::MiddlewareBuilder) {
131134
bucket: s3::Bucket::new(
132135
String::from("alexcrichton-test"),
133136
None,
134-
String::new(),
135-
String::new(),
137+
std::env::var("S3_ACCESS_KEY").unwrap_or(String::new()),
138+
std::env::var("S3_SECRET_KEY").unwrap_or(String::new()),
136139
&api_protocol,
137140
),
138141
proxy: Some(proxy),
@@ -631,6 +634,7 @@ fn new_req_body(
631634
) -> Vec<u8> {
632635
let kws = kws.into_iter().map(u::Keyword).collect();
633636
let cats = cats.into_iter().map(u::Category).collect();
637+
634638
new_crate_to_body(
635639
&u::NewCrate {
636640
name: u::CrateName(krate.name),
@@ -653,7 +657,19 @@ fn new_req_body(
653657
)
654658
}
655659

656-
fn new_crate_to_body(new_crate: &u::NewCrate, krate: &[u8]) -> Vec<u8> {
660+
fn new_crate_to_body(new_crate: &u::NewCrate, files: &[(&str, &[u8])]) -> Vec<u8> {
661+
let mut tarball = Vec::new();
662+
{
663+
let mut ar = tar::Builder::new(GzEncoder::new(&mut tarball, Compression::Default));
664+
for &(name, data) in files {
665+
let mut header = tar::Header::new_gnu();
666+
t!(header.set_path(name));
667+
header.set_size(data.len() as u64);
668+
header.set_cksum();
669+
t!(ar.append(&header, &data[..]));
670+
}
671+
t!(ar.finish());
672+
}
657673
let json = serde_json::to_string(&new_crate).unwrap();
658674
let mut body = Vec::new();
659675
body.extend(
@@ -668,12 +684,12 @@ fn new_crate_to_body(new_crate: &u::NewCrate, krate: &[u8]) -> Vec<u8> {
668684
body.extend(json.as_bytes().iter().cloned());
669685
body.extend(
670686
&[
671-
(krate.len() >> 0) as u8,
672-
(krate.len() >> 8) as u8,
673-
(krate.len() >> 16) as u8,
674-
(krate.len() >> 24) as u8,
687+
(tarball.len() >> 0) as u8,
688+
(tarball.len() >> 8) as u8,
689+
(tarball.len() >> 16) as u8,
690+
(tarball.len() >> 24) as u8,
675691
],
676692
);
677-
body.extend(krate);
693+
body.extend(tarball);
678694
body
679695
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/category_index

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/category_show

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
28f9838158f8dcbdbc01089634d7a14f495fb8f6
1+
69551e7bd735be9c59d3702a7885669979f0cdbc
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
aa4e8e9caaaff1f7af211c2bc7d96b4202992e13
1+
7534f8b996e3a3f800f0a324f619adba12a74532

src/tests/http-data/keyword_index

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/keyword_show

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/keyword_uppercase

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/krate_download

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/krate_following

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/krate_good_badges

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1 @@
1-
===REQUEST 343
2-
PUT http://alexcrichton-test.s3.amazonaws.com/crates/foobadger/foobadger-1.0.0.crate HTTP/1.1
3-
Accept: */*
4-
Proxy-Connection: Keep-Alive
5-
Authorization: AWS AKIAJF3GEK7N44BACDZA:GDxGb6r3SIqo9wXuzHrgMNWekwk=
6-
Content-Length: 0
7-
Host: alexcrichton-test.s3.amazonaws.com
8-
Content-Type: application/x-tar
9-
Date: Sun, 28 Jun 2015 14:07:17 -0700
10-
11-
12-
===RESPONSE 258
13-
HTTP/1.1 200
14-
x-amz-request-id: CB0E925D8E3AB3E8
15-
x-amz-id-2: SiaMwszM1p2TzXlLauvZ6kRKcUCg7HoyBW29vts42w9ArrLwkJWl8vuvPuGFkpM6XGH+YXN852g=
16-
date: Sun, 28 Jun 2015 21:07:51 GMT
17-
etag: "d41d8cd98f00b204e9800998ecf8427e"
18-
content-length: 0
19-
server: AmazonS3
20-
21-
1+
[{"request":{"uri":"http://alexcrichton-test.s3.amazonaws.com/crates/foobadger/foobadger-1.0.0.crate","method":"PUT","headers":[["Content-Length","35"],["Date","Thu, 14 Sep 2017 09:44:04 -0700"],["Host","alexcrichton-test.s3.amazonaws.com"],["Proxy-Connection","Keep-Alive"],["Accept","*/*"],["Authorization","AWS AKIAICL5IWUZYWWKA7JA:SJNsc3Rh+zV7dPHUQGr8Z4bO4ro="],["Content-Type","application/x-tar"]],"body":[31,139,8,0,0,0,0,0,0,3,237,192,1,1,0,0,0,130,32,255,175,110,72,80,192,171,1,46,175,181,239,0,4,0,0]},"response":{"status":200,"headers":[["x-amz-request-id","259B82C2DC8C8C75"],["Date","Thu, 14 Sep 2017 16:44:06 GMT"],["ETag","\"fc9f988c1ba7ccea220952fd61213979\""],["Server","AmazonS3"],["x-amz-id-2","nej/HWPKXhTiYTCv+j1kSPOsoEHSJIeTaHnc2kbeLGflGKle+nGm5WqOUIKLKaRuF/IJFfG9bCI="],["Content-Length","0"]],"body":[]}}]
Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1 @@
1-
===REQUEST 349
2-
PUT http://alexcrichton-test.s3.amazonaws.com/crates/foo_good_cat/foo_good_cat-1.0.0.crate HTTP/1.1
3-
Accept: */*
4-
Proxy-Connection: Keep-Alive
5-
Authorization: AWS AKIAJF3GEK7N44BACDZA:GDxGb6r3SIqo9wXuzHrgMNWekwk=
6-
Content-Length: 0
7-
Host: alexcrichton-test.s3.amazonaws.com
8-
Content-Type: application/x-tar
9-
Date: Sun, 28 Jun 2015 14:07:17 -0700
10-
11-
12-
===RESPONSE 258
13-
HTTP/1.1 200
14-
x-amz-request-id: CB0E925D8E3AB3E8
15-
x-amz-id-2: SiaMwszM1p2TzXlLauvZ6kRKcUCg7HoyBW29vts42w9ArrLwkJWl8vuvPuGFkpM6XGH+YXN852g=
16-
date: Sun, 28 Jun 2015 21:07:51 GMT
17-
etag: "d41d8cd98f00b204e9800998ecf8427e"
18-
content-length: 0
19-
server: AmazonS3
20-
21-
1+
[{"request":{"uri":"http://alexcrichton-test.s3.amazonaws.com/crates/foo_good_cat/foo_good_cat-1.0.0.crate","method":"PUT","headers":[["Authorization","AWS AKIAICL5IWUZYWWKA7JA:3YdZWaxXYkwNl7cP7iSgeBmnFIA="],["Date","Thu, 14 Sep 2017 09:44:04 -0700"],["Content-Length","35"],["Content-Type","application/x-tar"],["Proxy-Connection","Keep-Alive"],["Accept","*/*"],["Host","alexcrichton-test.s3.amazonaws.com"]],"body":[31,139,8,0,0,0,0,0,0,3,237,192,1,1,0,0,0,130,32,255,175,110,72,80,192,171,1,46,175,181,239,0,4,0,0]},"response":{"status":200,"headers":[["x-amz-id-2","6doapP6obvc16pdSxMsxgRX+TUB+55dkNfsyw3ludfUfBOd2xhf2sL3aI2dKsnf5YCyl0QkEnXM="],["x-amz-request-id","D4BB18987F1E192F"],["Date","Thu, 14 Sep 2017 16:44:06 GMT"],["Server","AmazonS3"],["ETag","\"fc9f988c1ba7ccea220952fd61213979\""],["Content-Length","0"]],"body":[]}}]
Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1 @@
1-
===REQUEST 359
2-
PUT http://alexcrichton-test.s3.amazonaws.com/crates/foo_ignored_badge/foo_ignored_badge-1.0.0.crate HTTP/1.1
3-
Accept: */*
4-
Proxy-Connection: Keep-Alive
5-
Authorization: AWS AKIAJF3GEK7N44BACDZA:GDxGb6r3SIqo9wXuzHrgMNWekwk=
6-
Content-Length: 0
7-
Host: alexcrichton-test.s3.amazonaws.com
8-
Content-Type: application/x-tar
9-
Date: Sun, 28 Jun 2015 14:07:17 -0700
10-
11-
12-
===RESPONSE 258
13-
HTTP/1.1 200
14-
x-amz-request-id: CB0E925D8E3AB3E8
15-
x-amz-id-2: SiaMwszM1p2TzXlLauvZ6kRKcUCg7HoyBW29vts42w9ArrLwkJWl8vuvPuGFkpM6XGH+YXN852g=
16-
date: Sun, 28 Jun 2015 21:07:51 GMT
17-
etag: "d41d8cd98f00b204e9800998ecf8427e"
18-
content-length: 0
19-
server: AmazonS3
20-
21-
1+
[{"request":{"uri":"http://alexcrichton-test.s3.amazonaws.com/crates/foo_ignored_badge/foo_ignored_badge-1.0.0.crate","method":"PUT","headers":[["Date","Thu, 14 Sep 2017 09:44:04 -0700"],["Host","alexcrichton-test.s3.amazonaws.com"],["Authorization","AWS AKIAICL5IWUZYWWKA7JA:PkIayPRQSzIV9dhyoyKUg4bDSzs="],["Proxy-Connection","Keep-Alive"],["Accept","*/*"],["Content-Type","application/x-tar"],["Content-Length","35"]],"body":[31,139,8,0,0,0,0,0,0,3,237,192,1,1,0,0,0,130,32,255,175,110,72,80,192,171,1,46,175,181,239,0,4,0,0]},"response":{"status":200,"headers":[["Content-Length","0"],["ETag","\"fc9f988c1ba7ccea220952fd61213979\""],["x-amz-id-2","lbe1X5M1zPPgDYNv9DDBKekuO0e5+gK+XthTu9TMtODupHpjj5eb9GqeOQq0w4L6gqPxQBJWJqU="],["Server","AmazonS3"],["Date","Thu, 14 Sep 2017 16:44:06 GMT"],["x-amz-request-id","37C5421A868669E2"]],"body":[]}}]
Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1 @@
1-
===REQUEST 355
2-
PUT http://alexcrichton-test.s3.amazonaws.com/crates/foo_ignored_cat/foo_ignored_cat-1.0.0.crate HTTP/1.1
3-
Accept: */*
4-
Proxy-Connection: Keep-Alive
5-
Authorization: AWS AKIAJF3GEK7N44BACDZA:GDxGb6r3SIqo9wXuzHrgMNWekwk=
6-
Content-Length: 0
7-
Host: alexcrichton-test.s3.amazonaws.com
8-
Content-Type: application/x-tar
9-
Date: Sun, 28 Jun 2015 14:07:17 -0700
10-
11-
12-
===RESPONSE 258
13-
HTTP/1.1 200
14-
x-amz-request-id: CB0E925D8E3AB3E8
15-
x-amz-id-2: SiaMwszM1p2TzXlLauvZ6kRKcUCg7HoyBW29vts42w9ArrLwkJWl8vuvPuGFkpM6XGH+YXN852g=
16-
date: Sun, 28 Jun 2015 21:07:51 GMT
17-
etag: "d41d8cd98f00b204e9800998ecf8427e"
18-
content-length: 0
19-
server: AmazonS3
20-
21-
1+
[{"request":{"uri":"http://alexcrichton-test.s3.amazonaws.com/crates/foo_ignored_cat/foo_ignored_cat-1.0.0.crate","method":"PUT","headers":[["Content-Type","application/x-tar"],["Proxy-Connection","Keep-Alive"],["Accept","*/*"],["Content-Length","35"],["Authorization","AWS AKIAICL5IWUZYWWKA7JA:zN+ouGBQMXYwxnltlU50HqLR4D0="],["Host","alexcrichton-test.s3.amazonaws.com"],["Date","Thu, 14 Sep 2017 09:44:04 -0700"]],"body":[31,139,8,0,0,0,0,0,0,3,237,192,1,1,0,0,0,130,32,255,175,110,72,80,192,171,1,46,175,181,239,0,4,0,0]},"response":{"status":200,"headers":[["ETag","\"fc9f988c1ba7ccea220952fd61213979\""],["x-amz-id-2","MV8ehajFmRoufqKP0fwR1c8SRJWyQbdRYy97wJybWRu7Euo8A5kkNfJ6epnDfXJy3vkjxetK3tE="],["x-amz-request-id","8356C99E90EA73EB"],["Date","Thu, 14 Sep 2017 16:44:06 GMT"],["Content-Length","0"],["Server","AmazonS3"]],"body":[]}}]

src/tests/http-data/krate_index

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

src/tests/http-data/krate_new_krate

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1 @@
1-
===REQUEST 339
2-
PUT http://alexcrichton-test.s3.amazonaws.com/crates/foo_new/foo_new-1.0.0.crate HTTP/1.1
3-
Accept: */*
4-
Proxy-Connection: Keep-Alive
5-
Authorization: AWS AKIAJF3GEK7N44BACDZA:GDxGb6r3SIqo9wXuzHrgMNWekwk=
6-
Content-Length: 0
7-
Host: alexcrichton-test.s3.amazonaws.com
8-
Content-Type: application/x-tar
9-
Date: Sun, 28 Jun 2015 14:07:17 -0700
10-
11-
12-
===RESPONSE 258
13-
HTTP/1.1 200
14-
x-amz-request-id: CB0E925D8E3AB3E8
15-
x-amz-id-2: SiaMwszM1p2TzXlLauvZ6kRKcUCg7HoyBW29vts42w9ArrLwkJWl8vuvPuGFkpM6XGH+YXN852g=
16-
date: Sun, 28 Jun 2015 21:07:51 GMT
17-
etag: "d41d8cd98f00b204e9800998ecf8427e"
18-
content-length: 0
19-
server: AmazonS3
20-
21-
1+
[{"request":{"uri":"http://alexcrichton-test.s3.amazonaws.com/crates/foo_new/foo_new-1.0.0.crate","method":"PUT","headers":[["Proxy-Connection","Keep-Alive"],["Accept","*/*"],["Content-Length","35"],["Host","alexcrichton-test.s3.amazonaws.com"],["Content-Type","application/x-tar"],["Date","Thu, 14 Sep 2017 09:44:05 -0700"],["Authorization","AWS AKIAICL5IWUZYWWKA7JA:wqYX81UuSZQN8fgc5iP80iGtuhQ="]],"body":[31,139,8,0,0,0,0,0,0,3,237,192,1,1,0,0,0,130,32,255,175,110,72,80,192,171,1,46,175,181,239,0,4,0,0]},"response":{"status":200,"headers":[["ETag","\"fc9f988c1ba7ccea220952fd61213979\""],["x-amz-request-id","43421DA20D1F6F8D"],["Date","Thu, 14 Sep 2017 16:44:06 GMT"],["Server","AmazonS3"],["Content-Length","0"],["x-amz-id-2","xVVFL9W1Qmv14Zgquz4gGVfNvTz+KF4TnWN2PaQXTnvq6HX2qFeQN1nCF45/gwEBrDTqNOZApFs="]],"body":[]}}]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[]

0 commit comments

Comments
 (0)