channel_db: protect load_db against raw messages that can no longer be parsed
This commit is contained in:
@@ -46,6 +46,7 @@ from .lnverifier import LNChannelVerifier, verify_sig_for_channel_update
|
|||||||
from .lnmsg import decode_msg
|
from .lnmsg import decode_msg
|
||||||
from . import ecc
|
from . import ecc
|
||||||
from .crypto import sha256d
|
from .crypto import sha256d
|
||||||
|
from .lnmsg import FailedToParseMsg
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .network import Network
|
from .network import Network
|
||||||
@@ -725,6 +726,8 @@ class ChannelDB(SqlDB):
|
|||||||
ci = ChannelInfo.from_raw_msg(msg)
|
ci = ChannelInfo.from_raw_msg(msg)
|
||||||
except IncompatibleOrInsaneFeatures:
|
except IncompatibleOrInsaneFeatures:
|
||||||
continue
|
continue
|
||||||
|
except FailedToParseMsg:
|
||||||
|
continue
|
||||||
self._channels[ShortChannelID.normalize(short_channel_id)] = ci
|
self._channels[ShortChannelID.normalize(short_channel_id)] = ci
|
||||||
c.execute("""SELECT * FROM node_info""")
|
c.execute("""SELECT * FROM node_info""")
|
||||||
for node_id, msg in c:
|
for node_id, msg in c:
|
||||||
@@ -732,11 +735,16 @@ class ChannelDB(SqlDB):
|
|||||||
node_info, node_addresses = NodeInfo.from_raw_msg(msg)
|
node_info, node_addresses = NodeInfo.from_raw_msg(msg)
|
||||||
except IncompatibleOrInsaneFeatures:
|
except IncompatibleOrInsaneFeatures:
|
||||||
continue
|
continue
|
||||||
|
except FailedToParseMsg:
|
||||||
|
continue
|
||||||
# don't load node_addresses because they dont have timestamps
|
# don't load node_addresses because they dont have timestamps
|
||||||
self._nodes[node_id] = node_info
|
self._nodes[node_id] = node_info
|
||||||
c.execute("""SELECT * FROM policy""")
|
c.execute("""SELECT * FROM policy""")
|
||||||
for key, msg in c:
|
for key, msg in c:
|
||||||
p = Policy.from_raw_msg(key, msg)
|
try:
|
||||||
|
p = Policy.from_raw_msg(key, msg)
|
||||||
|
except FailedToParseMsg:
|
||||||
|
continue
|
||||||
self._policies[(p.start_node, p.short_channel_id)] = p
|
self._policies[(p.start_node, p.short_channel_id)] = p
|
||||||
for channel_info in self._channels.values():
|
for channel_info in self._channels.values():
|
||||||
self._channels_for_node[channel_info.node1_id].add(channel_info.short_channel_id)
|
self._channels_for_node[channel_info.node1_id].add(channel_info.short_channel_id)
|
||||||
|
|||||||
Reference in New Issue
Block a user