@@ -6,13 +6,16 @@ use std::io;
6
6
use std:: io:: prelude:: * ;
7
7
use std:: sync:: Arc ;
8
8
9
- use self :: diesel:: prelude:: * ;
10
9
use chrono:: Utc ;
11
10
use conduit:: { Handler , Method } ;
12
11
use diesel:: update;
12
+ use flate2:: Compression ;
13
+ use flate2:: write:: GzEncoder ;
13
14
use git2;
15
+ use self :: diesel:: prelude:: * ;
14
16
use semver;
15
17
use serde_json;
18
+ use tar;
16
19
17
20
use cargo_registry:: git;
18
21
use cargo_registry:: models:: krate:: MAX_NAME_LENGTH ;
@@ -2235,3 +2238,25 @@ fn test_cargo_invite_owners() {
2235
2238
// assert_eq!(json.krate.name, "foo_new");
2236
2239
// assert_eq!(json.krate.max_version, "1.0.0");
2237
2240
// }
2241
+
2242
+ #[ test]
2243
+ fn new_krate_hard_links ( ) {
2244
+ let ( _b, app, middle) = :: app ( ) ;
2245
+ let mut req = :: new_req ( Arc :: clone ( & app) , "foo" , "1.1.0" ) ;
2246
+ :: sign_in ( & mut req, & app) ;
2247
+
2248
+ let mut tarball = Vec :: new ( ) ;
2249
+ {
2250
+ let mut ar = tar:: Builder :: new ( GzEncoder :: new ( & mut tarball, Compression :: default ( ) ) ) ;
2251
+ let mut header = tar:: Header :: new_gnu ( ) ;
2252
+ t ! ( header. set_path( "foo-1.1.0/bar" ) ) ;
2253
+ header. set_size ( 0 ) ;
2254
+ header. set_cksum ( ) ;
2255
+ header. set_entry_type ( tar:: EntryType :: hard_link ( ) ) ;
2256
+ t ! ( header. set_link_name( "foo-1.1.0/another" ) ) ;
2257
+ t ! ( ar. append( & header, & [ ] [ ..] ) ) ;
2258
+ t ! ( ar. finish( ) ) ;
2259
+ }
2260
+ let body = :: new_crate_to_body_with_tarball ( & new_crate ( "foo" ) , & tarball) ;
2261
+ bad_resp ! ( middle. call( req. with_body( & body) ) ) ;
2262
+ }
0 commit comments