Skip to content

Commit 0cd0c10

Browse files
authored
LAMBJ-146 Newline Not Allowed in Json String Error (#457)
1 parent fa9bf88 commit 0cd0c10

File tree

4 files changed

+23
-4
lines changed

4 files changed

+23
-4
lines changed

.github/releases/v0.9.0-beta5.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## Bug Fixes
2+
3+
- Fixes an issue where deserializing an SnsMessage`CloudFormationStackEvent would result in an error about newlines are not allowed in JSON strings.

src/Core/Serialization/StringConverter.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Text.Json;
33
using System.Text.Json.Serialization;
4+
using System.Text.RegularExpressions;
45

56
using SystemTextJsonSerializer = System.Text.Json.JsonSerializer;
67

@@ -43,7 +44,7 @@ public override bool CanConvert(Type typeToConvert)
4344
var isJsonLike = stringValue.StartsWith('{') || stringValue.StartsWith('[');
4445
var deserializable = isJsonLike
4546
? stringValue
46-
: $@"""{reader.GetString()?.Replace(@"""", @"\""")}""";
47+
: $@"""{JsonEncodedText.Encode(stringValue)}""";
4748

4849
return SystemTextJsonSerializer.Deserialize(deserializable, typeToConvert, options);
4950
}
@@ -52,7 +53,7 @@ public override bool CanConvert(Type typeToConvert)
5253
public override void Write(Utf8JsonWriter writer, object? value, JsonSerializerOptions options)
5354
{
5455
var stringValue = SystemTextJsonSerializer.Serialize(value!, typeToConvert, options);
55-
writer.WriteStringValue(stringValue);
56+
writer.WriteStringValue(Regex.Unescape(stringValue));
5657
}
5758
}
5859
}

tests/Unit/Sns/Serialization/CloudFormationStackEventConverterTests.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,13 +162,15 @@ string clientRequestToken
162162

163163
[Test, Auto]
164164
public void ShouldDeserializeInsideSnsMessage(
165+
string stackId,
165166
string clientRequestToken
166167
)
167168
{
168-
var source = $@"{{""Message"":""ClientRequestToken={clientRequestToken}""}}";
169+
var source = $@"{{""Message"":""ClientRequestToken='{clientRequestToken}'\nStackId='{stackId}'\n""}}";
169170
var result = JsonSerializer.Deserialize<SnsMessage<CloudFormationStackEvent>>(source);
170171

171172
result!.Message.ClientRequestToken.Should().Be(clientRequestToken);
173+
result!.Message.StackId.Should().Be(stackId);
172174
}
173175
}
174176

@@ -318,6 +320,19 @@ CloudFormationStackEvent stackEvent
318320

319321
lines.Should().Contain($"ClientRequestToken='{stackEvent.ClientRequestToken}'");
320322
}
323+
324+
[Test, Auto]
325+
public void ShouldSerializeInsideSnsMessage(
326+
string stackId,
327+
string clientRequestToken,
328+
SnsMessage<CloudFormationStackEvent> message
329+
)
330+
{
331+
var serialized = JsonSerializer.Serialize(message);
332+
var deserialized = JsonSerializer.Deserialize<SnsMessage<CloudFormationStackEvent>>(serialized);
333+
334+
deserialized!.Message.StackId.Should().Be(message.Message.StackId);
335+
}
321336
}
322337
}
323338
}

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"$schema": "https://raw.githubusercontent.com/AArnott/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json",
3-
"version": "0.9.0-beta4",
3+
"version": "0.9.0-beta5",
44
"publicReleaseRefSpec": [
55
"^refs/tags/v\\d\\.\\d"
66
]

0 commit comments

Comments
 (0)