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 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/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/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); + } } } } 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);