From 7d66bb3a500ab1b205544f695a47c5bb61d3133c Mon Sep 17 00:00:00 2001 From: Facundo Medica <14063057+facundomedica@users.noreply.github.com> Date: Mon, 29 Jan 2024 18:22:38 +0100 Subject: [PATCH] fix(textual): error if a formatted coin contains a comma (#19265) Co-authored-by: Aleksandr Bezobchuk --- x/tx/CHANGELOG.md | 4 ++++ x/tx/signing/textual/coins.go | 6 ++++++ x/tx/signing/textual/internal/testdata/coin.json | 7 ++++++- 3 files changed, 16 insertions(+), 1 deletion(-) 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`. 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 + } ]