Skip to content

Commit 9729547

Browse files
Merge pull request from GHSA-7xpv-4pm9-xch2
fixed issue on metachain when treating tx with invalid username
2 parents 3f77428 + 727ce94 commit 9729547

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

process/transaction/metaProcess.go

+9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package transaction
22

33
import (
4+
"errors"
5+
46
"github.com/multiversx/mx-chain-core-go/core"
57
"github.com/multiversx/mx-chain-core-go/core/check"
68
"github.com/multiversx/mx-chain-core-go/data/transaction"
@@ -108,6 +110,13 @@ func (txProc *metaTxProcessor) ProcessTransaction(tx *transaction.Transaction) (
108110

109111
err = txProc.checkTxValues(tx, acntSnd, acntDst, false)
110112
if err != nil {
113+
if errors.Is(err, process.ErrUserNameDoesNotMatchInCrossShardTx) {
114+
errProcessIfErr := txProc.processIfTxErrorCrossShard(tx, err.Error())
115+
if errProcessIfErr != nil {
116+
return 0, errProcessIfErr
117+
}
118+
return vmcommon.UserError, nil
119+
}
111120
return 0, err
112121
}
113122

process/transaction/metaProcess_test.go

+42
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@ import (
55
"math/big"
66
"testing"
77

8+
"github.com/multiversx/mx-chain-core-go/core"
89
"github.com/multiversx/mx-chain-core-go/data"
910
"github.com/multiversx/mx-chain-core-go/data/transaction"
1011
"github.com/multiversx/mx-chain-go/process"
1112
"github.com/multiversx/mx-chain-go/process/coordinator"
1213
"github.com/multiversx/mx-chain-go/process/mock"
1314
txproc "github.com/multiversx/mx-chain-go/process/transaction"
15+
"github.com/multiversx/mx-chain-go/sharding"
1416
"github.com/multiversx/mx-chain-go/state"
1517
"github.com/multiversx/mx-chain-go/testscommon"
1618
"github.com/multiversx/mx-chain-go/testscommon/hashingMocks"
1719
stateMock "github.com/multiversx/mx-chain-go/testscommon/state"
20+
"github.com/multiversx/mx-chain-go/vm"
1821
vmcommon "github.com/multiversx/mx-chain-vm-common-go"
1922
"github.com/multiversx/mx-chain-vm-common-go/builtInFunctions"
2023
"github.com/multiversx/mx-chain-vm-common-go/parsers"
@@ -446,3 +449,42 @@ func TestMetaTxProcessor_ProcessTransactionBuiltInCallTxShouldWork(t *testing.T)
446449
assert.True(t, builtInCalled)
447450
assert.Equal(t, 0, saveAccountCalled)
448451
}
452+
453+
func TestMetaTxProcessor_ProcessTransactionWithInvalidUsernameShouldNotError(t *testing.T) {
454+
t.Parallel()
455+
456+
tx := &transaction.Transaction{}
457+
tx.Nonce = 0
458+
tx.SndAddr = bytes.Repeat([]byte{1}, 32)
459+
tx.RcvAddr = vm.GovernanceSCAddress
460+
tx.RcvUserName = []byte("username")
461+
tx.Value = big.NewInt(45)
462+
tx.GasPrice = 1
463+
tx.GasLimit = 1
464+
465+
acntDst, err := state.NewUserAccount(tx.RcvAddr)
466+
assert.Nil(t, err)
467+
468+
called := false
469+
adb := createAccountStub(tx.SndAddr, tx.RcvAddr, acntDst, acntDst)
470+
scProcessor := &testscommon.SCProcessorMock{
471+
ProcessIfErrorCalled: func(acntSnd state.UserAccountHandler, txHash []byte, tx data.TransactionHandler, returnCode string, returnMessage []byte, snapshot int, gasLocked uint64) error {
472+
called = true
473+
return nil
474+
},
475+
}
476+
477+
args := createMockNewMetaTxArgs()
478+
args.Accounts = adb
479+
args.ScProcessor = scProcessor
480+
args.ShardCoordinator, _ = sharding.NewMultiShardCoordinator(3, core.MetachainShardId)
481+
txProc, _ := txproc.NewMetaTxProcessor(args)
482+
483+
err = txProc.VerifyTransaction(tx)
484+
assert.Equal(t, err, process.ErrUserNameDoesNotMatchInCrossShardTx)
485+
486+
returnCode, err := txProc.ProcessTransaction(tx)
487+
assert.Nil(t, err)
488+
assert.Equal(t, vmcommon.UserError, returnCode)
489+
assert.True(t, called)
490+
}

0 commit comments

Comments
 (0)