Skip to content

Commit b0557a1

Browse files
committed
Add defensive programming
1 parent a17303c commit b0557a1

28 files changed

+218
-218
lines changed

src/Microsoft.OpenApi/Models/OpenApiCallback.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ public OpenApiCallback() { }
4545
/// </summary>
4646
public OpenApiCallback(OpenApiCallback callback)
4747
{
48-
PathItems = new(callback.PathItems);
49-
UnresolvedReference = callback.UnresolvedReference;
50-
Reference = new(callback.Reference);
51-
Extensions = new Dictionary<string, IOpenApiExtension>(callback.Extensions);
48+
PathItems = new(callback?.PathItems);
49+
UnresolvedReference = callback?.UnresolvedReference ?? false;
50+
Reference = new(callback?.Reference);
51+
Extensions = callback?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(callback?.Extensions) : callback?.Extensions;
5252
}
5353

5454
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiComponents.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,16 @@ public OpenApiComponents() { }
7878
/// </summary>
7979
public OpenApiComponents(OpenApiComponents components)
8080
{
81-
Schemas = new Dictionary<string, OpenApiSchema>(components.Schemas);
82-
Responses = new Dictionary<string, OpenApiResponse>(components.Responses);
83-
Parameters = new Dictionary<string, OpenApiParameter>(components.Parameters);
84-
Examples = new Dictionary<string, OpenApiExample>(components.Examples);
85-
RequestBodies = new Dictionary<string, OpenApiRequestBody>(components.RequestBodies);
86-
Headers = new Dictionary<string, OpenApiHeader>(components.Headers);
87-
SecuritySchemes = new Dictionary<string, OpenApiSecurityScheme>(components.SecuritySchemes);
88-
Links = new Dictionary<string, OpenApiLink>(components.Links);
89-
Callbacks = new Dictionary<string, OpenApiCallback>(components.Callbacks);
90-
Extensions = new Dictionary<string, IOpenApiExtension>(components.Extensions);
81+
Schemas = components?.Schemas != null ? new Dictionary<string, OpenApiSchema>(components?.Schemas) : components?.Schemas;
82+
Responses = components?.Responses != null ? new Dictionary<string, OpenApiResponse>(components?.Responses) : components?.Responses;
83+
Parameters = components?.Parameters != null ? new Dictionary<string, OpenApiParameter>(components?.Parameters) : components?.Parameters;
84+
Examples = components?.Examples != null ? new Dictionary<string, OpenApiExample>(components?.Examples) : components?.Examples;
85+
RequestBodies = components?.RequestBodies != null ? new Dictionary<string, OpenApiRequestBody>(components?.RequestBodies) : components?.RequestBodies;
86+
Headers = components?.Headers != null ? new Dictionary<string, OpenApiHeader>(components?.Headers) : components?.Headers;
87+
SecuritySchemes = components?.SecuritySchemes != null ? new Dictionary<string, OpenApiSecurityScheme>(components?.SecuritySchemes) : components?.SecuritySchemes;
88+
Links = components?.Links != null ? new Dictionary<string, OpenApiLink>(components?.Links) : components?.Links;
89+
Callbacks = components?.Callbacks != null ? new Dictionary<string, OpenApiCallback>(components?.Callbacks) : components?.Callbacks;
90+
Extensions = components?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(components?.Extensions) : components?.Extensions;
9191
}
9292

9393
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiContact.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@ public OpenApiContact() { }
4545
/// </summary>
4646
public OpenApiContact(OpenApiContact contact)
4747
{
48-
Name = contact.Name;
49-
Url = new Uri(contact.Url.OriginalString);
50-
Email = contact.Email;
51-
Extensions = new Dictionary<string, IOpenApiExtension>(contact.Extensions);
48+
Name = contact?.Name;
49+
Url = contact?.Url;
50+
Email = contact?.Email;
51+
Extensions = contact?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(contact?.Extensions) : contact?.Extensions;
5252
}
5353

5454
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiDiscriminator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public OpenApiDiscriminator() { }
3232
/// </summary>
3333
public OpenApiDiscriminator(OpenApiDiscriminator discriminator)
3434
{
35-
PropertyName = discriminator.PropertyName;
36-
Mapping = new Dictionary<string, string>(discriminator.Mapping);
35+
PropertyName = discriminator?.PropertyName;
36+
Mapping = discriminator?.Mapping != null ? new Dictionary<string, string>(discriminator?.Mapping) : discriminator?.Mapping;
3737
}
3838

3939
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiDocument.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,15 @@ public OpenApiDocument() {}
7272
/// </summary>
7373
public OpenApiDocument(OpenApiDocument document)
7474
{
75-
Workspace = new(document.Workspace);
76-
Info = new(document.Info);
77-
Servers = new List<OpenApiServer>(document.Servers);
78-
Paths = new(document.Paths);
79-
Components = new(document.Components);
80-
SecurityRequirements = new List<OpenApiSecurityRequirement>(document.SecurityRequirements);
81-
Tags = new List<OpenApiTag>(document.Tags);
82-
ExternalDocs = new(document.ExternalDocs);
83-
Extensions = new Dictionary<string, IOpenApiExtension>(document.Extensions);
75+
Workspace = new(document?.Workspace);
76+
Info = new(document?.Info);
77+
Servers = document?.Servers != null ? new List<OpenApiServer>(document?.Servers) : document?.Servers;
78+
Paths = new(document?.Paths);
79+
Components = new(document?.Components);
80+
SecurityRequirements = document?.SecurityRequirements != null ? new List<OpenApiSecurityRequirement>(document?.SecurityRequirements) : document?.SecurityRequirements;
81+
Tags = document?.Tags != null ? new List<OpenApiTag>(document?.Tags) : document?.Tags;
82+
ExternalDocs = new(document?.ExternalDocs);
83+
Extensions = document?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(document?.Extensions) : document?.Extensions;
8484
}
8585

8686
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiEncoding.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,12 @@ public OpenApiEncoding() {}
6363
/// </summary>
6464
public OpenApiEncoding(OpenApiEncoding encoding)
6565
{
66-
ContentType = encoding.ContentType;
67-
Headers = new Dictionary<string, OpenApiHeader>(encoding.Headers);
68-
Style = encoding.Style;
69-
Explode = encoding.Explode;
70-
AllowReserved = encoding.AllowReserved;
71-
Extensions = new Dictionary<string, IOpenApiExtension>(encoding.Extensions);
66+
ContentType = encoding?.ContentType;
67+
Headers = encoding?.Headers != null ? new Dictionary<string, OpenApiHeader>(encoding?.Headers) : encoding?.Headers;
68+
Style = encoding?.Style;
69+
Explode = encoding?.Explode ?? false;
70+
AllowReserved = encoding?.AllowReserved ?? false;
71+
Extensions = encoding?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(encoding?.Extensions) : encoding?.Extensions;
7272
}
7373

7474
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiExample.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ public OpenApiExample() {}
6464
/// </summary>
6565
public OpenApiExample(OpenApiExample example)
6666
{
67-
Summary = example.Summary;
68-
Description = example.Description;
69-
Value = OpenApiAnyCloneHelper.CloneFromCopyConstructor(example.Value);
70-
ExternalValue = example.ExternalValue;
71-
Extensions = new Dictionary<string, IOpenApiExtension>(example.Extensions);
72-
Reference = new(example.Reference);
73-
UnresolvedReference = example.UnresolvedReference;
67+
Summary = example?.Summary;
68+
Description = example?.Description;
69+
Value = OpenApiAnyCloneHelper.CloneFromCopyConstructor(example?.Value);
70+
ExternalValue = example?.ExternalValue;
71+
Extensions = example?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(example?.Extensions) : example?.Extensions;
72+
Reference = new(example?.Reference);
73+
UnresolvedReference = example?.UnresolvedReference ?? false;
7474
}
7575

7676
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiExternalDocs.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public OpenApiExternalDocs() {}
3939
/// </summary>
4040
public OpenApiExternalDocs(OpenApiExternalDocs externalDocs)
4141
{
42-
Description = externalDocs.Description;
43-
Url = new Uri(externalDocs.Url.OriginalString);
44-
Extensions = new Dictionary<string, IOpenApiExtension>(externalDocs.Extensions);
42+
Description = externalDocs?.Description;
43+
Url = externalDocs?.Url != null ? new Uri(externalDocs?.Url?.OriginalString) : externalDocs?.Url;
44+
Extensions = externalDocs?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(externalDocs?.Extensions) : externalDocs?.Extensions;
4545
}
4646

4747
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiHeader.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -96,20 +96,20 @@ public OpenApiHeader() {}
9696
/// </summary>
9797
public OpenApiHeader(OpenApiHeader header)
9898
{
99-
UnresolvedReference = header.UnresolvedReference;
100-
Reference = new(header.Reference);
101-
Description = header.Description;
102-
Required = header.Required;
103-
Deprecated = header.Deprecated;
104-
AllowEmptyValue = header.AllowEmptyValue;
105-
Style = header.Style;
106-
Explode = header.Explode;
107-
AllowReserved = header.AllowReserved;
108-
Schema = new(header.Schema);
109-
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor(header.Example);
110-
Examples = new Dictionary<string, OpenApiExample>(header.Examples);
111-
Content = new Dictionary<string, OpenApiMediaType>(header.Content);
112-
Extensions = new Dictionary<string, IOpenApiExtension>(header.Extensions);
99+
UnresolvedReference = header?.UnresolvedReference ?? false;
100+
Reference = new(header?.Reference);
101+
Description = header?.Description;
102+
Required = header?.Required ?? false;
103+
Deprecated = header?.Deprecated ?? false;
104+
AllowEmptyValue = header?.AllowEmptyValue ?? false;
105+
Style = header?.Style;
106+
Explode = header?.Explode ?? false;
107+
AllowReserved = header?.AllowReserved ?? false;
108+
Schema = new(header?.Schema);
109+
Example = OpenApiAnyCloneHelper.CloneFromCopyConstructor(header?.Example);
110+
Examples = header?.Examples != null ? new Dictionary<string, OpenApiExample>(header?.Examples) : header?.Examples;
111+
Content = header?.Content != null ? new Dictionary<string, OpenApiMediaType>(header?.Content) : header?.Content;
112+
Extensions = header?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(header?.Extensions) : header?.Extensions;
113113
}
114114

115115
/// <summary>

src/Microsoft.OpenApi/Models/OpenApiInfo.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ public OpenApiInfo() {}
5959
/// </summary>
6060
public OpenApiInfo(OpenApiInfo info)
6161
{
62-
Title = info.Title;
63-
Description = info.Description;
64-
Version = info.Version;
65-
TermsOfService = info.TermsOfService;
66-
Contact = new(info.Contact);
67-
License = new(info.License);
68-
Extensions = new Dictionary<string, IOpenApiExtension>(info.Extensions);
62+
Title = info?.Title;
63+
Description = info?.Description;
64+
Version = info?.Version;
65+
TermsOfService = info?.TermsOfService;
66+
Contact = new(info?.Contact);
67+
License = new(info?.License);
68+
Extensions = info?.Extensions != null ? new Dictionary<string, IOpenApiExtension>(info?.Extensions) : info?.Extensions;
6969
}
7070

7171
/// <summary>

0 commit comments

Comments
 (0)