mirror of
https://github.com/wiremock/WireMock.Net.git
synced 2026-08-01 01:38:35 +02:00
Why does JsonMatcher accept an invalid JSON string? #291
Closed
opened 2025-12-29 15:19:47 +01:00 by adam
·
8 comments
No Branch/Tag Specified
master
1341-mapping-json
stef-aspire-tests-updates
bug/973-TinyMapper
bug/1149-AppendGuidToSavedMappingFile
feature/1150-DockerImageVersion
61
stef-1108
stef-1097
stef-1083-MessageOptions_Type_Conflict
stef-1062-logger
stef-IgnoreOpenApiErrors
stef-928-TypeLoadException-FluentAssertions-net472
nunit
stef-849
stef-847-regex-questionmark
http_verb
WireMockServerContext
webapp
ai
CommandLineArgumentsParser
2.13.0
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.0
2.6.0
2.5.0
2.4.0
2.3.0
2.2.0
2.1.0
2.0.0
1.25.0
1.24.0
1.23.0
1.22.0
1.21.0
1.20.0
1.19.0
1.18.0
1.17.0
1.16.0
1.15.0
1.14.0
1.13.0
1.12.0
1.11.2
1.11.0
1.10.1
1.10.0
1.9.1
1.9.0
1.8.18
1.8.17
1.8.16
1.8.15
1.8.14
1.8.13
1.8.12
1.8.11
1.8.10
1.8.9
1.8.8
1.8.7
1.8.6
1.8.5
1.8.3
1.8.2
1.8.1
1.8.0
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.5.62
1.5.61
1.5.60
1.5.59
1.5.58
1.5.57
1.5.56
1.5.55
1.5.54
1.5.53
1.5.52
1.5.51
1.5.50
1.5.49
1.5.48
1.5.47
1.5.46
1.5.45
1.5.44
1.5.43
1.5.42
1.5.41
1.5.40
1.5.39
1.5.38
1.5.37
1.5.36
1.5.35
1.5.34
1.5.33
1.5.32
1.5.31
1.5.30
1.5.29
1.5.28
1.5.27
1.5.26
1.5.25
1.5.24
1.5.23
1.5.22
1.5.21
1.5.20
1.5.19
1.5.18
1.5.17
1.5.16
1.5.15
1.5.14
1.5.13
1.5.12
1.5.11
1.5.10
1.5.9
1.5.8
1.5.7
1.5.6
1.5.5
1.5.4
1.5.3
1.5.2
1.5.1
1.5.0
1.4.43
1.4.42
1.4.41
1.4.40
1.4.39
1.4.38
1.4.37
1.4.36
1.4.35
1.4.34
1.4.33
1.4.32
1.4.31
1.4.30
1.4.29
1.4.28
1.4.27
1.4.26
1.4.25
1.4.24
1.4.23
1.4.22
1.4.21
1.4.20
1.4.19
1.4.18
1.4.17
1.4.16
1.4.15
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.10
1.3.9
1.3.8
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0
1.2.18
1.2.17
1.2.16
1.2.15
1.2.14
1.2.13
1.2.12
1.2.11.0
1.2.10
1.2.9.0
1.2.8.0
1.2.7.0
1.2.6.0
1.2.5.0
1.2.4.0
1.2.3.0
1.2.2.0
1.2.1.0
1.2.0.0
1.1.10
1.1.9.0
1.1.8.0
1.1.7.0
1.1.6.0
1.1.5.0
1.1.3.0
1.1.2.0
1.1.1.0
1.1.0.0
1.0.43.0
1.0.42.0
1.0.41.0
1.0.40.0
1.0.39.0
1.0.38.0
1.0.37.0
1.0.36.0
1.0.35.0
1.0.34.0
1.0.33.0
1.0.32.0
1.0.31.0
1.0.29.0
1.0.28.0
1.0.25.0
1.0.24.0
1.0.23.0
1.0.22.0
1.0.21.0
1.0.20.0
1.0.19.0
1.0.18.0
1.0.17.0
1.0.16.0
1.0.15.0
1.0.14.0
1.0.13.0
1.0.12.0
1.0.11.0
1.0.10.0
1.0.9.0
1.0.8.0
1.0.7.0
1.0.6.1
1.0.6
1.0.5
1.0.4.21
1.0.4.20
1.0.4.19
1.0.4.18
1.0.4.17
1.0.4.16
1.0.4.15
1.0.4.14
1.0.4.13
1.0.4.12
1.0.4.11
1.0.4.10
1.0.4.9
1.0.4.8
1.0.4.7
1.0.4.6
1.0.4.5
1.0.4.4
1.0.4.3
1.0.4.2
1.0.4.1
1.0.4.0
1.0.3.20
1.0.3.19
1.0.3.18
1.0.3.17
1.0.3.16
1.0.3.15
1.0.3.14
1.0.3.13
1.0.3.12
1.0.3.11
1.0.3.10
1.0.3.9
1.0.3.8
1.0.3.7
1.0.3.6
1.0.3.5
1.0.3.4
1.0.3.3
1.0.3.2
1.0.3.1
1.0.3.0
1.0.2.13
1.0.2.12
1.0.2.11
1.0.2.10
1.0.2.9
1.0.2.8
1.0.2.7
1.0.2.6
1.0.2.5
1.0.2.4
1.0.2.1
1.0.2.0
1.0.1.5
1.0.1.3
1.0.1.2
1.0.1.1
1.0.0.0
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Assignees
adam (Adam Melkus)
Clear assignees
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/WireMock.Net-wiremock#291
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Originally created by @lobsteropteryx on GitHub (Aug 6, 2020).
It appears that the
JsonMatcherconstructor accepts an invalid JSON string, and swallows the parsing exception.Is there a valid use case for this behavior? As far as I can tell, it still won't properly match an invalid JSON string. For me, the preferred behavior would be to let the caller know right away that the string is not valid JSON.
I would be happy to submit a pull request with this change, but I wanted to make sure I'm not missing something.
Thank you much, this is a fantastic tool that we use every day!
@StefH commented on GitHub (Aug 7, 2020):
@lobsteropteryx
Thanks for the question.
I think that more places in the code do a try-catch-swallow. So it's best approach to detect all these places and use a new configuration setting
bool? ThrowOnException.What do you think?
@lobsteropteryx commented on GitHub (Aug 7, 2020):
I will have to dig a little deeper to see where else that might happen, but a boolean setting would be fine.
Another possibility might be to try to parse the string immediately when constructing the
JsonMatcher. That would limit the blast radius, since I believe it's only created two places internally.Is this something you would like help with?
@StefH commented on GitHub (Aug 7, 2020):
I see your point.
This code https://github.com/WireMock-Net/WireMock.Net/blob/8ae0abb023537605107c154dfebe8be3338df0bd/src/WireMock.Net/Matchers/JsonMatcher.cs#L91 uses the
Value, but if indeed the conversion from thatobject ValuetoJToken jtokenValueis done in the constructor, any errors are found earlier.And if this code fails:
For exception I can use that configuration setting bool? ThrowOnException.
@StefH commented on GitHub (Aug 7, 2020):
Parsing the code in the constructor : you can try this in preview MyGet :
WireMock.Net.1.2.17-ci-13680.nupkg@StefH commented on GitHub (Aug 8, 2020):
Hello @lobsteropteryx,
A new preview version can be found on MyGet:
WireMock.Net.1.2.17-ci-13684. Can you please test?Set the
ThrowExceptionWhenMatcherFailsin theWireMockServerSettingsto true.https://github.com/WireMock-Net/WireMock.Net/pull/500
@StefH commented on GitHub (Aug 12, 2020):
@lobsteropteryx Did you have time to test this new setting?
@lobsteropteryx commented on GitHub (Aug 12, 2020):
Hi @StefH!
I've done some testing, and I like the new behavior--parsing the string immediately, and raising an exception for invalid JSON.
You might have an issue with the
ThrowExceptionparameter; as it stands right now, you'll still get the same exception raised whetherThrowExceptionis true or false, since you're callingConvertValueToJTokenhere: https://github.com/WireMock-Net/WireMock.Net/blob/JsonMatcherFixes/src/WireMock.Net/Matchers/JsonMatcher.cs#L98I actually think this is correct, and perhaps the
ThrowExceptionparameter isn't needed; I can't think of a situation where I wouldn't want the exception to be thrown right away.@StefH commented on GitHub (Aug 12, 2020):
I also think that throwing exception in constructor is correct. You get this exception immediately when adding a invalid mapping.
Later today I will merge PR and create new official release.