diff --git a/core/src/apps/wallet/sign_tx/signing.py b/core/src/apps/wallet/sign_tx/signing.py index 34f069235..0511a2c7b 100644 --- a/core/src/apps/wallet/sign_tx/signing.py +++ b/core/src/apps/wallet/sign_tx/signing.py @@ -790,6 +790,13 @@ def output_is_change( segwit_in: int, multifp: multisig.MultisigFingerprint, ) -> bool: + if o.script_type not in ( + OutputScriptType.PAYTOADDRESS, + OutputScriptType.PAYTOMULTISIG, + OutputScriptType.PAYTOWITNESS, + OutputScriptType.PAYTOP2SHWITNESS, + ): + return False if o.multisig and not multifp.matches(o.multisig): return False if output_is_segwit(o) and o.amount > segwit_in: diff --git a/legacy/firmware/signing.c b/legacy/firmware/signing.c index 5b251ac93..b8d0b242d 100644 --- a/legacy/firmware/signing.c +++ b/legacy/firmware/signing.c @@ -696,6 +696,13 @@ static bool signing_check_output(TxOutputType *txoutput) { } } + if ((txoutput->script_type != OutputScriptType_PAYTOADDRESS) && + (txoutput->script_type != OutputScriptType_PAYTOMULTISIG) && + (txoutput->script_type != OutputScriptType_PAYTOWITNESS) && + (txoutput->script_type != OutputScriptType_PAYTOP2SHWITNESS)) { + is_change = false; + } + if (is_change) { if (change_spend == 0) { // not set change_spend = txoutput->amount;