Skip to content

Commit 57ad85f

Browse files
authored
Merge pull request #2330 from microsoft/fix/additional-security
fix/additional security
2 parents 00721e1 + 5835057 commit 57ad85f

File tree

2 files changed

+57
-42
lines changed

2 files changed

+57
-42
lines changed

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 54 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -165,50 +165,25 @@ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion versio
165165

166166
writer.WriteEndObject();
167167
}
168-
169-
/// <inheritdoc/>
170-
public void SerializeAsV2(IOpenApiWriter writer)
168+
/// <summary>
169+
/// Write the "in" property for V2 serialization.
170+
/// </summary>
171+
/// <param name="writer">Writer to use for the serialization</param>
172+
internal virtual void WriteInPropertyForV2(IOpenApiWriter writer)
171173
{
172-
Utils.CheckArgumentNull(writer);
173-
174-
writer.WriteStartObject();
175-
176-
// in
177-
if (this is OpenApiFormDataParameter)
178-
{
179-
writer.WriteProperty(OpenApiConstants.In, "formData");
180-
}
181-
else if (this is OpenApiBodyParameter)
182-
{
183-
writer.WriteProperty(OpenApiConstants.In, "body");
184-
}
185-
else
186-
{
187-
writer.WriteProperty(OpenApiConstants.In, In?.GetDisplayName());
188-
}
189-
190-
// name
191-
writer.WriteProperty(OpenApiConstants.Name, Name);
192-
193-
// description
194-
writer.WriteProperty(OpenApiConstants.Description, Description);
195-
196-
// required
197-
writer.WriteProperty(OpenApiConstants.Required, Required, false);
198-
199-
// deprecated
200-
writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
201-
202-
var extensionsClone = Extensions is not null ? new Dictionary<string, IOpenApiExtension>(Extensions) : null;
174+
writer.WriteProperty(OpenApiConstants.In, In?.GetDisplayName());
175+
}
203176

204-
// schema
205-
if (this is OpenApiBodyParameter)
206-
{
207-
writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
208-
}
177+
/// <summary>
178+
/// Write the request body schema for V2 serialization.
179+
/// </summary>
180+
/// <param name="writer">Writer to use for the serialization</param>
181+
/// <param name="extensionsClone">Extensions clone</param>
182+
internal virtual void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Dictionary<string, IOpenApiExtension>? extensionsClone)
183+
{
209184
// In V2 parameter's type can't be a reference to a custom object schema or can't be of type object
210185
// So in that case map the type as string.
211-
else if (Schema is OpenApiSchemaReference { UnresolvedReference: true } || (Schema?.Type & JsonSchemaType.Object) == JsonSchemaType.Object)
186+
if (Schema is OpenApiSchemaReference { UnresolvedReference: true } || (Schema?.Type & JsonSchemaType.Object) == JsonSchemaType.Object)
212187
{
213188
writer.WriteProperty(OpenApiConstants.Type, "string");
214189
}
@@ -270,7 +245,34 @@ public void SerializeAsV2(IOpenApiWriter writer)
270245
}
271246
}
272247
}
248+
}
249+
250+
/// <inheritdoc/>
251+
public void SerializeAsV2(IOpenApiWriter writer)
252+
{
253+
Utils.CheckArgumentNull(writer);
254+
255+
writer.WriteStartObject();
256+
257+
// in
258+
WriteInPropertyForV2(writer);
273259

260+
// name
261+
writer.WriteProperty(OpenApiConstants.Name, Name);
262+
263+
// description
264+
writer.WriteProperty(OpenApiConstants.Description, Description);
265+
266+
// required
267+
writer.WriteProperty(OpenApiConstants.Required, Required, false);
268+
269+
// deprecated
270+
writer.WriteProperty(OpenApiConstants.Deprecated, Deprecated, false);
271+
272+
var extensionsClone = Extensions is not null ? new Dictionary<string, IOpenApiExtension>(Extensions) : null;
273+
274+
// schema
275+
WriteRequestBodySchemaForV2(writer, extensionsClone);
274276
//examples
275277
if (Examples != null && Examples.Any())
276278
{
@@ -315,12 +317,24 @@ public IOpenApiParameter CreateShallowCopy()
315317
/// </summary>
316318
internal class OpenApiBodyParameter : OpenApiParameter
317319
{
320+
internal override void WriteRequestBodySchemaForV2(IOpenApiWriter writer, Dictionary<string, IOpenApiExtension>? extensionsClone)
321+
{
322+
writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
323+
}
324+
internal override void WriteInPropertyForV2(IOpenApiWriter writer)
325+
{
326+
writer.WriteProperty(OpenApiConstants.In, "body");
327+
}
318328
}
319329

320330
/// <summary>
321331
/// Form parameter class to propagate information needed for <see cref="OpenApiParameter.SerializeAsV2"/>
322332
/// </summary>
323333
internal class OpenApiFormDataParameter : OpenApiParameter
324334
{
335+
internal override void WriteInPropertyForV2(IOpenApiWriter writer)
336+
{
337+
writer.WriteProperty(OpenApiConstants.In, "formData");
338+
}
325339
}
326340
}

src/Microsoft.OpenApi/Writers/FormattingStreamWriter.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,13 @@ public class FormattingStreamWriter : StreamWriter
1919
public FormattingStreamWriter(Stream stream, IFormatProvider formatProvider)
2020
: base(stream)
2121
{
22-
this.FormatProvider = formatProvider;
22+
_formatProvider = formatProvider;
2323
}
24+
private readonly IFormatProvider _formatProvider;
2425

2526
/// <summary>
2627
/// The <see cref="IFormatProvider"/> associated with this <see cref="FormattingStreamWriter"/>.
2728
/// </summary>
28-
public override IFormatProvider FormatProvider { get; }
29+
public override IFormatProvider FormatProvider { get => _formatProvider; }
2930
}
3031
}

0 commit comments

Comments
 (0)