User will lose all Console functionality when upgrading their wallet and an upgrade target has not been set up
Console supports upgrading of the manager wallet using the `upgradeWalletType()` function.\\n```\\n  function upgradeWalletType() external {\\n    if (!isWallet(msg.sender)) \\n    revert WalletDoesntExist(msg.sender); uint8 fromWalletType = _walletDataMap[msg.sender].walletType;\\n      _setWalletType(msg.sender, _upgradablePaths[fromWalletType]);\\n      emit WalletUpgraded(msg.sender, fromWalletType,\\n  _upgradablePaths[fromWalletType]);\\n  }\\n```\\n\\nNote that upgradablePaths are set by governance. There is a lack of check that the upgradable path is defined before performing the upgrade.\\n```\\n   function _setWalletType(address _wallet, uint8 _walletType) private {\\n    _walletDataMap[_wallet].walletType = _walletType;\\n    }\\n```\\n\\nIf _upgradablePaths[fromWalletType] is zero (uninitialized), the user's wallet type shall become zero too. However, zero is an invalid value, as defined by the isWallet() view function:\\n```\\n  function isWallet(address _wallet) public view returns (bool) \\n    { WalletData memory walletData = _walletDataMap[_wallet];\\n  if (walletData.walletType == 0 || walletData.feeToken == address(0)){\\n          return false;\\n        }\\n    return true;\\n  }\\n```\\n\\nImpact As a result, most of the functionality of Console is permanently broken when users upgrade their wallet when an upgrade path isn't set. They can salvage their funds if it is a Safe account, as they can still execute on it directly.
When settings a new wallet type, make sure the new type is not zero.
```\\n  function upgradeWalletType() external {\\n    if (!isWallet(msg.sender)) \\n    revert WalletDoesntExist(msg.sender); uint8 fromWalletType = _walletDataMap[msg.sender].walletType;\\n      _setWalletType(msg.sender, _upgradablePaths[fromWalletType]);\\n      emit WalletUpgraded(msg.sender, fromWalletType,\\n  _upgradablePaths[fromWalletType]);\\n  }\\n```\\n