tinvoices: always validate that LNInvoice.invoice can be decoded - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 261ad804cad9c8a4f9dbc6595727a35cadc0204e DIR parent 9d2ede8796f4b9c460d50cd7dfc0a85a0de50b6d HTML Author: SomberNight <somber.night@protonmail.com> Date: Fri, 11 Sep 2020 19:56:04 +0200 invoices: always validate that LNInvoice.invoice can be decoded related: #6559 The LNInvoice.from_json() method previously did not validate, which is used by e.g. wallet.import_invoices. Diffstat: M electrum/invoices.py | 4 ++++ M electrum/lnutil.py | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) --- DIR diff --git a/electrum/invoices.py b/electrum/invoices.py t@@ -149,6 +149,10 @@ class LNInvoice(Invoice): __lnaddr = None + @invoice.validator + def check(self, attribute, value): + lndecode(value) # this checks the str can be decoded + @property def _lnaddr(self) -> LnAddr: if self.__lnaddr is None: DIR diff --git a/electrum/lnutil.py b/electrum/lnutil.py t@@ -1036,7 +1036,8 @@ def validate_features(features: int) -> None: if (1 << fbit) & LN_FEATURES_IMPLEMENTED == 0 and fbit % 2 == 0: raise UnknownEvenFeatureBits(fbit) if not features.validate_transitive_dependecies(): - raise IncompatibleOrInsaneFeatures("not all transitive dependencies are set") + raise IncompatibleOrInsaneFeatures(f"not all transitive dependencies are set. " + f"features={features}") def derive_payment_secret_from_payment_preimage(payment_preimage: bytes) -> bytes: