Skip to content

Commit f59c4c8

Browse files
authored
[Bug Fix] Packages with empty descriptions cause HTTP 500 on reflows (#9001)
* Fixed empty description -> null bug, added a uit test * Fixed null description processing to only correct null/empty descriptions on reflow
1 parent 9daddf7 commit f59c4c8

2 files changed

Lines changed: 59 additions & 1 deletion

File tree

src/NuGetGallery.Core/Packaging/PackageMetadata.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,14 +273,22 @@ public static PackageMetadata FromNuspecReader(NuspecReader nuspecReader, bool s
273273
}
274274
}
275275

276-
return new PackageMetadata(
276+
var packageMetadata = new PackageMetadata(
277277
nuspecReader.GetMetadata().ToDictionary(kvp => kvp.Key, kvp => kvp.Value),
278278
nuspecReader.GetDependencyGroups(useStrictVersionCheck: strict),
279279
nuspecReader.GetFrameworkAssemblyGroups(),
280280
nuspecReader.GetPackageTypes(),
281281
nuspecReader.GetMinClientVersion(),
282282
nuspecReader.GetRepositoryMetadata(),
283283
nuspecReader.GetLicenseMetadata());
284+
285+
// Fix null or empty description values for reflowed packages
286+
if (!strict)
287+
{
288+
packageMetadata.Description = packageMetadata.Description ?? string.Empty;
289+
}
290+
291+
return packageMetadata;
284292
}
285293

286294
private class StrictNuspecReader : NuspecReader

tests/NuGetGallery.Core.Facts/Packaging/PackageMetadataFacts.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,40 @@ public void CanReadBasicMetadataProperties()
205205
Assert.Equal("git", packageMetadata.RepositoryType);
206206
}
207207

208+
[Fact]
209+
public void CanProcessEmptyNuspecDescriptionValueOnReflow()
210+
{
211+
// Arrange
212+
var packageStream = CreateTestPackageStreamWithEmptyDescription();
213+
var nupkg = new PackageArchiveReader(packageStream, leaveStreamOpen: false);
214+
var nuspec = nupkg.GetNuspecReader();
215+
216+
// Act
217+
var packageMetadata = PackageMetadata.FromNuspecReader(
218+
nuspec,
219+
strict: false);
220+
221+
// Assert
222+
Assert.NotNull(packageMetadata.Description);
223+
}
224+
225+
[Fact]
226+
public void DoesNotFixEmptyNuspecDescriptionValueOnUpload()
227+
{
228+
// Arrange
229+
var packageStream = CreateTestPackageStreamWithEmptyDescription();
230+
var nupkg = new PackageArchiveReader(packageStream, leaveStreamOpen: false);
231+
var nuspec = nupkg.GetNuspecReader();
232+
233+
// Act
234+
var packageMetadata = PackageMetadata.FromNuspecReader(
235+
nuspec,
236+
strict: true);
237+
238+
// Assert
239+
Assert.Null(packageMetadata.Description);
240+
}
241+
208242
[Theory]
209243
[InlineData(false)]
210244
[InlineData(true)]
@@ -360,6 +394,22 @@ private static Stream CreateTestPackageStream()
360394
</package>");
361395
}
362396

397+
private static Stream CreateTestPackageStreamWithEmptyDescription()
398+
{
399+
return CreateTestPackageStream(@"<?xml version=""1.0""?>
400+
<package xmlns=""http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"">
401+
<metadata>
402+
<id>TestPackage</id>
403+
<version>0.0.0.1</version>
404+
<title>Package A</title>
405+
<authors>authora, authorb</authors>
406+
<owners>ownera, ownerb</owners>
407+
<requireLicenseAcceptance>false</requireLicenseAcceptance>
408+
<description></description>
409+
</metadata>
410+
</package>");
411+
}
412+
363413
private static Stream CreateTestPackageStreamWithMetadataElementName(string metadataName, string value = "some value")
364414
{
365415
return CreateTestPackageStream($@"<?xml version=""1.0""?>

0 commit comments

Comments
 (0)