From 08de0eb7c793f7027e59c21d3ebb0c5ac252c98e Mon Sep 17 00:00:00 2001 From: Facundo Date: Fri, 26 Jan 2024 17:28:00 +0100 Subject: [PATCH 1/2] fix(textual): error if a formatted coin contains a comma --- x/tx/signing/textual/coins.go | 6 ++++++ x/tx/signing/textual/internal/testdata/coin.json | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/x/tx/signing/textual/coins.go b/x/tx/signing/textual/coins.go index 3e3232ded699..28d3cb9b14e2 100644 --- a/x/tx/signing/textual/coins.go +++ b/x/tx/signing/textual/coins.go @@ -284,6 +284,12 @@ func FormatCoins(coins []*basev1beta1.Coin, metadata []*bankv1beta1.Metadata) (s if err != nil { return "", err } + + // If a coin contains a comma, return an error given that the output + // could be misinterpreted by the user as 2 different coins. + if strings.Contains(formatted[i], ",") { + return "", fmt.Errorf("coin %s contains a comma", formatted[i]) + } } if len(coins) == 0 { diff --git a/x/tx/signing/textual/internal/testdata/coin.json b/x/tx/signing/textual/internal/testdata/coin.json index 1a1ac79b9306..02231d2d712e 100644 --- a/x/tx/signing/textual/internal/testdata/coin.json +++ b/x/tx/signing/textual/internal/testdata/coin.json @@ -327,5 +327,10 @@ {"text":"", "error": true}, {"text":"1COSM", "error": true}, {"text":"1 COSM", "error": true}, - {"text":" 1 COSM", "error": true} + {"text":" 1 COSM", "error": true}, + { + "proto": {"amount": "10000000", "denom": "point, 222222 point"}, + "metadata": {"display": "POINT", "base": "point", "denom_units": [{"denom": "point", "exponent": 0}, {"denom": "POINT", "exponent": 0}]}, + "error": true + } ] From fcfaafbb5916692546efca34c10381f148366525 Mon Sep 17 00:00:00 2001 From: Facundo Date: Mon, 29 Jan 2024 16:07:18 +0100 Subject: [PATCH 2/2] add cl --- x/tx/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/x/tx/CHANGELOG.md b/x/tx/CHANGELOG.md index cbdfe5f44b92..bb5705875b16 100644 --- a/x/tx/CHANGELOG.md +++ b/x/tx/CHANGELOG.md @@ -31,6 +31,10 @@ Ref: https://keepachangelog.com/en/1.0.0/ ## [Unreleased] +### Bug Fixes + +* [#19265](https://github.com/cosmos/cosmos-sdk/pull/19265) Reject denoms that contain a comma. + ### Improvements * [#18857](https://github.com/cosmos/cosmos-sdk/pull/18857) Moved `FormatCoins` from `core/coins` to this package under `signing/textual`.