Skip to content

NullReferenceException in SerializeExamples (Regression 1.6.17) #1773

@mus65

Description

@mus65

Describe the bug

Regression #1768 .
After upgrading from v1.6.16 to v1.6.17 we are hitting the following null reference.

This happens because we are explicitly setting Example = null in our code. If this is not allowed, I would expect an ArgumentNullException when setting it instead of a NullReferenceException when serializing.

System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.OpenApi.Models.OpenApiMediaType.SerializeExamples(IOpenApiWriter writer, IDictionary`2 examples)
   at Microsoft.OpenApi.Models.OpenApiMediaType.SerializeAsV3(IOpenApiWriter writer)
   at Microsoft.OpenApi.Models.OpenApiRequestBody.<>c.<SerializeAsV3WithoutReference>b__28_0(IOpenApiWriter w, OpenApiMediaType c)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.<>c__DisplayClass17_0`1.<WriteMapInternal>b__0(IOpenApiWriter w, String _, T s)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteMapInternal[T](IOpenApiWriter writer, String name, IDictionary`2 elements, Action`3 action)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteMapInternal[T](IOpenApiWriter writer, String name, IDictionary`2 elements, Action`2 action)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteRequiredMap[T](IOpenApiWriter writer, String name, IDictionary`2 elements, Action`2 action)
   at Microsoft.OpenApi.Models.OpenApiRequestBody.SerializeAsV3WithoutReference(IOpenApiWriter writer)
   at Microsoft.OpenApi.Models.OpenApiRequestBody.SerializeAsV3(IOpenApiWriter writer)
   at Microsoft.OpenApi.Models.OpenApiOperation.<>c.<SerializeAsV3>b__59_3(IOpenApiWriter w, OpenApiRequestBody r)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteRequiredObject[T](IOpenApiWriter writer, String name, T value, Action`2 action)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteOptionalObject[T](IOpenApiWriter writer, String name, T value, Action`2 action)
   at Microsoft.OpenApi.Models.OpenApiOperation.SerializeAsV3(IOpenApiWriter writer)
   at Microsoft.OpenApi.Models.OpenApiPathItem.<>c.<SerializeAsV3WithoutReference>b__39_2(IOpenApiWriter w, OpenApiOperation o)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteRequiredObject[T](IOpenApiWriter writer, String name, T value, Action`2 action)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteOptionalObject[T](IOpenApiWriter writer, String name, T value, Action`2 action)
   at Microsoft.OpenApi.Models.OpenApiPathItem.SerializeAsV3WithoutReference(IOpenApiWriter writer)
   at Microsoft.OpenApi.Models.OpenApiPathItem.SerializeAsV3(IOpenApiWriter writer)
   at Microsoft.OpenApi.Models.OpenApiExtensibleDictionary`1.<>c.<SerializeAsV3>b__6_0(IOpenApiWriter w, T p)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteRequiredObject[T](IOpenApiWriter writer, String name, T value, Action`2 action)
   at Microsoft.OpenApi.Models.OpenApiExtensibleDictionary`1.SerializeAsV3(IOpenApiWriter writer)
   at Microsoft.OpenApi.Models.OpenApiDocument.<>c.<SerializeAsV3>b__44_2(IOpenApiWriter w, OpenApiPaths p)
   at Microsoft.OpenApi.Writers.OpenApiWriterExtensions.WriteRequiredObject[T](IOpenApiWriter writer, String name, T value, Action`2 action)
   at Microsoft.OpenApi.Models.OpenApiDocument.SerializeAsV3(IOpenApiWriter writer)

OpenApi File To Reproduce
Code repro:

using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.Writers;

OpenApiDocument doc = new OpenApiDocument
{
  Paths = new OpenApiPaths
  {
    ["test"] = new OpenApiPathItem()
    {
      Operations =
      {
        [OperationType.Post] = new OpenApiOperation
        {
          RequestBody = new OpenApiRequestBody()
            {
              Content =
              {
                ["application/json"] = new OpenApiMediaType()
                {
                  Examples = null,
                },
              }
            }
        },
      }
    },
  }
};

OpenApiJsonWriter apiWriter = new OpenApiJsonWriter(new StringWriter());
doc.SerializeAsV3(apiWriter);

Expected behavior
No NullReferenceException.

Screenshots/Code Snippets

Additional context

Metadata

Metadata

Assignees

Labels

type:bugA broken experiencetype:regressionA bug from previous release

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions