From cf94ebc1062d2b3128d1eb452372087fea5512a8 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Mon, 29 Aug 2022 10:17:03 +0200 Subject: [PATCH] If an invoice cannot be parsed in import_invoices or import_requests, raise FileImportFailed. Fixes #7950 --- electrum/wallet.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/electrum/wallet.py b/electrum/wallet.py index e4501b995..780ff44ff 100644 --- a/electrum/wallet.py +++ b/electrum/wallet.py @@ -82,7 +82,7 @@ from .mnemonic import Mnemonic from .logging import get_logger, Logger from .lnworker import LNWallet from .paymentrequest import PaymentRequest -from .util import read_json_file, write_json_file, UserFacingException +from .util import read_json_file, write_json_file, UserFacingException, FileImportFailed from .util import EventListener, event_listener if TYPE_CHECKING: @@ -986,7 +986,7 @@ class Abstract_Wallet(ABC, Logger, EventListener): ) return invoice - def save_invoice(self, invoice: Invoice) -> None: + def save_invoice(self, invoice: Invoice, *, write_to_disk: bool = True) -> None: key = self.get_key_for_outgoing_invoice(invoice) if not invoice.is_lightning(): if self.is_onchain_invoice_paid(invoice)[0]: @@ -995,7 +995,8 @@ class Abstract_Wallet(ABC, Logger, EventListener): for txout in invoice.get_outputs(): self._invoices_from_scriptpubkey_map[txout.scriptpubkey].add(key) self._invoices[key] = invoice - self.save_db() + if write_to_disk: + self.save_db() def clear_invoices(self): self._invoices.clear() @@ -1021,7 +1022,10 @@ class Abstract_Wallet(ABC, Logger, EventListener): def import_requests(self, path): data = read_json_file(path) for x in data: - req = Invoice(**x) + try: + req = Invoice(**x) + except: + raise FileImportFailed(_("Invalid invoice format")) self.add_payment_request(req, write_to_disk=False) self.save_db() @@ -1031,8 +1035,12 @@ class Abstract_Wallet(ABC, Logger, EventListener): def import_invoices(self, path): data = read_json_file(path) for x in data: - invoice = Invoice(**x) - self.save_invoice(invoice) + try: + req = Invoice(**x) + except: + raise FileImportFailed(_("Invalid invoice format")) + self.save_invoice(invoice, write_to_disk=False) + self.save_db() def export_invoices(self, path): write_json_file(path, list(self._invoices.values()))