From c34b15079412126b16dd13024f2bf7e799cbd180 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Thu, 29 Nov 2018 20:56:55 -0300 Subject: [PATCH 1/2] check and log claim id validity during migration --- lbrynet/extras/wallet/account.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lbrynet/extras/wallet/account.py b/lbrynet/extras/wallet/account.py index 94bbbe1e2..8a4cc9b57 100644 --- a/lbrynet/extras/wallet/account.py +++ b/lbrynet/extras/wallet/account.py @@ -1,6 +1,7 @@ import json import logging +from lbrynet.schema.validator import validate_claim_id from torba.client.baseaccount import BaseAccount from torba.client.basetransaction import TXORef @@ -46,6 +47,15 @@ class Account(BaseAccount): for maybe_claim_id in list(self.certificates): results['total'] += 1 if ':' not in maybe_claim_id: + try: + validate_claim_id(maybe_claim_id) + except Exception as e: + log.warning( + "Failed to migrate claim '%s': %s", + maybe_claim_id, str(e) + ) + results['migrate-failed'] += 1 + continue claims = await self.ledger.network.get_claims_by_ids(maybe_claim_id) if maybe_claim_id not in claims: log.warning( From 4826eb9969a9dd65fad4b8f8fe2de1f6692c9e21 Mon Sep 17 00:00:00 2001 From: Jack Robison Date: Fri, 30 Nov 2018 12:46:53 -0500 Subject: [PATCH 2/2] migrate double hex encoded certificates --- lbrynet/extras/wallet/account.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lbrynet/extras/wallet/account.py b/lbrynet/extras/wallet/account.py index 8a4cc9b57..441e7ee3a 100644 --- a/lbrynet/extras/wallet/account.py +++ b/lbrynet/extras/wallet/account.py @@ -1,5 +1,6 @@ import json import logging +import binascii from lbrynet.schema.validator import validate_claim_id from torba.client.baseaccount import BaseAccount @@ -43,6 +44,30 @@ class Account(BaseAccount): 'previous-success': 0, 'previous-corrupted': 0 } + double_hex_encoded_to_pop = [] + + for maybe_claim_id in list(self.certificates): + if ':' not in maybe_claim_id: + try: + validate_claim_id(maybe_claim_id) + continue + except Exception: + try: + maybe_claim_id_bytes = maybe_claim_id + if isinstance(maybe_claim_id_bytes, str): + maybe_claim_id_bytes = maybe_claim_id_bytes.encode() + decoded_double_hex = binascii.unhexlify(maybe_claim_id_bytes).decode() + validate_claim_id(decoded_double_hex) + if decoded_double_hex in self.certificates: + log.warning("don't know how to migrate certificate %s", decoded_double_hex) + else: + log.info("claim id was double hex encoded, fixing it") + double_hex_encoded_to_pop.append((maybe_claim_id, decoded_double_hex)) + except Exception: + continue + + for double_encoded_claim_id, correct_claim_id in double_hex_encoded_to_pop: + self.certificates[correct_claim_id] = self.certificates.pop(double_encoded_claim_id) for maybe_claim_id in list(self.certificates): results['total'] += 1