1- // Copyright (c) .NET Foundation. All rights reserved.
1+ // Copyright (c) .NET Foundation. All rights reserved.
22// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
44using System ;
@@ -118,7 +118,8 @@ public async Task WillMarkPackageRegistrationVerifiedFlagCorrectly(bool shouldMa
118118 var matchingNamepsaces = testNamespaces
119119 . Where ( rn => prefixes . Any ( pr => id . StartsWith ( pr , StringComparison . OrdinalIgnoreCase ) ) )
120120 . ToList ( ) ;
121- prefixes . ForEach ( p => {
121+ prefixes . ForEach ( p =>
122+ {
122123 var existingNamespace = testNamespaces . FirstOrDefault ( rn => rn . Value . Equals ( p , StringComparison . OrdinalIgnoreCase ) ) ;
123124 existingNamespace . Owners . Add ( firstUser ) ;
124125 } ) ;
@@ -149,7 +150,8 @@ public async Task WillMarkPackageRegistrationNotVerifiedIfIdMatchesNonOwnedShare
149150 var testUsers = ReservedNamespaceServiceTestData . GetTestUsers ( ) ;
150151 var firstUser = testUsers . First ( ) ;
151152 var lastUser = testUsers . Last ( ) ;
152- prefixes . ForEach ( p => {
153+ prefixes . ForEach ( p =>
154+ {
153155 var existingNamespace = testNamespaces . FirstOrDefault ( rn => rn . Value . Equals ( p , StringComparison . OrdinalIgnoreCase ) ) ;
154156 existingNamespace . IsSharedNamespace = true ;
155157 existingNamespace . Owners . Add ( firstUser ) ;
@@ -257,7 +259,7 @@ public async Task AcceptsUnsignedPackageAfterUnsignedPackage()
257259 } ) ;
258260
259261 var result = await _target . ValidateBeforeGeneratePackageAsync (
260- _nuGetPackage . Object ,
262+ _nuGetPackage . Object ,
261263 GetPackageMetadata ( _nuGetPackage ) ) ;
262264
263265 Assert . Equal ( PackageValidationResultType . Accepted , result . Type ) ;
@@ -320,7 +322,7 @@ public async Task AcceptsUnsignedPackagesWithNoPackageRegistration()
320322 Times . Once ) ;
321323 }
322324
323- public static IEnumerable < object [ ] > WarnsOnMalformedRepositoryMetadata_Data = new [ ]
325+ public static IEnumerable < object [ ] > WarnsOnMalformedRepositoryMetadata_Data = new [ ]
324326 {
325327 new object [ ] { null , null , null } ,
326328 new object [ ] { "git" , null , null } ,
@@ -983,7 +985,7 @@ public async Task RejectsLongLicenseNodeValues(string licenseNodeValue)
983985 }
984986
985987 [ Fact ]
986- public async Task RejectsNupkgsReportingIncorrectFileLength ( )
988+ public async Task RejectsNupkgsReportingIncorrectFileLengthForLicenseFile ( )
987989 {
988990 const string licenseFilename = "license.txt" ;
989991 const string licenseFileContents = "abcdefghijklnopqrstuvwxyz" ;
@@ -994,44 +996,73 @@ public async Task RejectsNupkgsReportingIncorrectFileLength()
994996 licenseFilename : licenseFilename ,
995997 licenseFileContents : licenseFileContents ) ;
996998
999+ PatchFileSizeInPackageStream ( licenseFilename , licenseFileContents , packageStream ) ;
1000+
1001+ _nuGetPackage = PackageServiceUtility . CreateNuGetPackage ( packageStream ) ;
1002+
1003+ // Act
1004+ var result = await _target . ValidateBeforeGeneratePackageAsync (
1005+ _nuGetPackage . Object ,
1006+ GetPackageMetadata ( _nuGetPackage ) ) ;
1007+
1008+ // Assert
1009+ Assert . Equal ( PackageValidationResultType . Invalid , result . Type ) ;
1010+ Assert . Contains ( "corrupt" , result . Message . PlainTextMessage ) ;
1011+ Assert . Empty ( result . Warnings ) ;
1012+ }
1013+
1014+ [ Fact ]
1015+ public async Task RejectsNupkgsReportingIncorrectFileLengthForNuspecFile ( )
1016+ {
1017+ const string nuspecFilename = "theId.nuspec" ;
1018+ var nuspecFileContents = TestDataResourceUtility . GetResourceString ( nuspecFilename ) ;
1019+
1020+ // Arrange
1021+ var packageStream = GeneratePackageStream ( ) ;
1022+
1023+ PatchFileSizeInPackageStream ( nuspecFilename , nuspecFileContents , packageStream ) ;
1024+
1025+ _nuGetPackage = PackageServiceUtility . CreateNuGetPackage ( packageStream ) ;
1026+
1027+ // Act
1028+ var result = await _target . ValidateBeforeGeneratePackageAsync (
1029+ _nuGetPackage . Object ,
1030+ GetPackageMetadata ( _nuGetPackage ) ) ;
1031+
1032+ // Assert
1033+ Assert . Equal ( PackageValidationResultType . Invalid , result . Type ) ;
1034+ Assert . Contains ( "corrupt" , result . Message . PlainTextMessage ) ;
1035+ Assert . Empty ( result . Warnings ) ;
1036+ }
1037+
1038+ private static void PatchFileSizeInPackageStream ( string fileName , string fileContents , MemoryStream packageStream )
1039+ {
9971040 var buffer = packageStream . GetBuffer ( ) ;
9981041
999- var licenseFilenameBytes = Encoding . ASCII . GetBytes ( licenseFilename ) ;
1042+ var fileNameInBytes = Encoding . ASCII . GetBytes ( fileName ) ;
10001043
10011044 // the file name should appear twice in the zip stream:
10021045 // 1. where the compressed stream is saved.
10031046 // 2. in the central directory
10041047 // we'll need to patch stream length in both places
10051048
1006- var firstInstanceOffset = FindSequenceIndex ( licenseFilenameBytes , buffer ) ;
1049+ var firstInstanceOffset = FindSequenceIndex ( fileNameInBytes , buffer ) ;
10071050 Assert . True ( firstInstanceOffset > 0 ) ;
10081051 var firstSizeOffset = firstInstanceOffset - 8 ;
10091052 Assert . True ( firstSizeOffset > 0 ) ;
10101053 var firstLength = BitConverter . ToInt32 ( buffer , firstSizeOffset ) ;
1011- Assert . Equal ( licenseFileContents . Length , firstLength ) ;
1054+ Assert . Equal ( fileContents . Length , firstLength ) ;
10121055
1013- var secondInstanceOffset = FindSequenceIndex ( licenseFilenameBytes , buffer , firstInstanceOffset + licenseFilename . Length ) ;
1056+ var secondInstanceOffset = FindSequenceIndex ( fileNameInBytes , buffer , firstInstanceOffset + fileName . Length ) ;
10141057 Assert . True ( secondInstanceOffset > 0 ) ;
10151058 var secondSizeOffset = secondInstanceOffset - 22 ;
10161059 Assert . True ( secondSizeOffset > 0 ) ;
10171060 var secondLength = BitConverter . ToInt32 ( buffer , secondSizeOffset ) ;
1018- Assert . Equal ( licenseFileContents . Length , secondLength ) ;
1061+ Assert . Equal ( fileContents . Length , secondLength ) ;
10191062
10201063 // now that we have offsets, we'll just patch them
10211064 buffer [ firstSizeOffset ] = 1 ;
10221065 buffer [ secondSizeOffset ] = 1 ;
1023-
1024- _nuGetPackage = PackageServiceUtility . CreateNuGetPackage ( packageStream ) ;
1025-
1026- // Act
1027- var result = await _target . ValidateBeforeGeneratePackageAsync (
1028- _nuGetPackage . Object ,
1029- GetPackageMetadata ( _nuGetPackage ) ) ;
1030-
1031- // Assert
1032- Assert . Equal ( PackageValidationResultType . Invalid , result . Type ) ;
1033- Assert . Contains ( "corrupt" , result . Message . PlainTextMessage ) ;
1034- Assert . Empty ( result . Warnings ) ;
10351066 }
10361067
10371068 [ Theory ]
@@ -1418,7 +1449,7 @@ public async Task AcceptNotTyposquattingNotNewVersion()
14181449 public async Task RejectIsTyposquattingNewVersion ( )
14191450 {
14201451 _isNewPackageRegistration = true ;
1421- _typosquattingCheckCollisionIds = new List < string > { "typosquatting_package_Id" } ;
1452+ _typosquattingCheckCollisionIds = new List < string > { "typosquatting_package_Id" } ;
14221453 _typosquattingService
14231454 . Setup ( x => x . IsUploadedPackageIdTyposquatting ( It . IsAny < string > ( ) , It . IsAny < User > ( ) , out _typosquattingCheckCollisionIds ) )
14241455 . Returns ( true ) ;
0 commit comments