From ca1591eb5162ae4928140eb750fc18f8d92d8e7f Mon Sep 17 00:00:00 2001 From: skibitsky Date: Mon, 29 Jul 2024 18:42:46 +0300 Subject: [PATCH 1/3] Validate session events emit data --- WalletConnectSharp.Sign/Engine.cs | 2 ++ WalletConnectSharp.Sign/Internals/EngineValidation.cs | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/WalletConnectSharp.Sign/Engine.cs b/WalletConnectSharp.Sign/Engine.cs index 56dd1ca..31d3c41 100644 --- a/WalletConnectSharp.Sign/Engine.cs +++ b/WalletConnectSharp.Sign/Engine.cs @@ -7,6 +7,7 @@ using WalletConnectSharp.Common.Model.Errors; using WalletConnectSharp.Common.Model.Relay; using WalletConnectSharp.Common.Utils; +using WalletConnectSharp.Core; using WalletConnectSharp.Core.Interfaces; using WalletConnectSharp.Core.Models; using WalletConnectSharp.Core.Models.Pairing; @@ -818,6 +819,7 @@ public async Task Respond(string topic, JsonRpcResponse response) public async Task Emit(string topic, EventData eventData, string chainId = null) { IsInitialized(); + await PrivateThis.IsValidEmit(topic, eventData, chainId); await MessageHandler.SendRequest, object>(topic, new SessionEvent { ChainId = chainId, Event = eventData, Topic = topic }); } diff --git a/WalletConnectSharp.Sign/Internals/EngineValidation.cs b/WalletConnectSharp.Sign/Internals/EngineValidation.cs index 800757d..8e4c59b 100644 --- a/WalletConnectSharp.Sign/Internals/EngineValidation.cs +++ b/WalletConnectSharp.Sign/Internals/EngineValidation.cs @@ -344,7 +344,7 @@ private void ValidateNamespacesChainId(Namespaces namespaces, string chainId) { if (!Utils.IsValidChainId(chainId)) { - throw new FormatException($"ChainId {chainId} should be a string and conform to 'chainId:chainId' format."); + throw new FormatException($"ChainId {chainId} should be a string and conform to CAIP-2."); } var chains = GetNamespacesChains(namespaces); From 76768ed01bc459fd8029459ed2b9c6ddd8bfcd54 Mon Sep 17 00:00:00 2001 From: skibitsky Date: Mon, 29 Jul 2024 18:44:24 +0300 Subject: [PATCH 2/3] Fixed unhandledable session request exceptions --- Tests/WalletConnectSharp.Web3Wallet.Tests/SignTests.cs | 4 ++++ WalletConnectSharp.Sign/Internals/EngineHandler.cs | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/Tests/WalletConnectSharp.Web3Wallet.Tests/SignTests.cs b/Tests/WalletConnectSharp.Web3Wallet.Tests/SignTests.cs index a546721..71e94f7 100644 --- a/Tests/WalletConnectSharp.Web3Wallet.Tests/SignTests.cs +++ b/Tests/WalletConnectSharp.Web3Wallet.Tests/SignTests.cs @@ -580,6 +580,10 @@ await Task.WhenAll( Assert.True(_dapp.TryUnsubscribeFromSessionEvent(referenceTypeEventData.Name, ReferenceTypeEventHandler)); Assert.True(_dapp.TryUnsubscribeFromSessionEvent(valueTypeEventData.Name, ValueTypeEventHandler)); + + // Test invalid chains + await Assert.ThrowsAsync(() => _wallet.EmitSessionEvent(session.Topic, valueTypeEventData, "invalid chain")); + await Assert.ThrowsAsync(() => _wallet.EmitSessionEvent(session.Topic, valueTypeEventData, "123:321")); } [Fact, Trait("Category", "unit")] diff --git a/WalletConnectSharp.Sign/Internals/EngineHandler.cs b/WalletConnectSharp.Sign/Internals/EngineHandler.cs index ef3475e..8cd2ac9 100644 --- a/WalletConnectSharp.Sign/Internals/EngineHandler.cs +++ b/WalletConnectSharp.Sign/Internals/EngineHandler.cs @@ -352,6 +352,10 @@ async Task IEnginePrivate.OnSessionEventRequest(string topic, JsonRpcRequest, bool>(id, topic, Error.FromException(e)); } + catch (Exception e) // to avoid unhandled exceptions caused by invalid events sent by another peer + { + logger.LogError(e); + } } } } From dabb1a21e442af2f0b2bcd9d8f4a1c3eedb65115 Mon Sep 17 00:00:00 2001 From: skibitsky Date: Mon, 29 Jul 2024 18:56:45 +0300 Subject: [PATCH 3/3] Version bump --- Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 56cc509..e845163 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,7 +1,7 @@ - 2.4.0 + 2.4.1 net6.0;net7.0;net8.0;netstandard2.1; true