fix: message id type inonsistency in handle ihave and message id parsing improvement in handle iwant

This commit is contained in:
unniznd
2025-08-15 13:53:24 +05:30
parent 90f143cd88
commit dc04270c19
3 changed files with 43 additions and 10 deletions

31
libp2p/pubsub/utils.py Normal file
View File

@ -0,0 +1,31 @@
import ast
from libp2p.custom_types import (
MessageID,
)
def parse_message_id_safe(msg_id_str: str) -> MessageID:
"""Safely handle message ID as string."""
return MessageID(msg_id_str)
def safe_parse_message_id(msg_id_str: str) -> tuple[bytes, bytes]:
"""
Safely parse message ID using ast.literal_eval with validation.
:param msg_id_str: String representation of message ID
:return: Tuple of (seqno, from_id) as bytes
:raises ValueError: If parsing fails
"""
try:
parsed = ast.literal_eval(msg_id_str)
if not isinstance(parsed, tuple) or len(parsed) != 2:
raise ValueError("Invalid message ID format")
seqno, from_id = parsed
if not isinstance(seqno, bytes) or not isinstance(from_id, bytes):
raise ValueError("Message ID components must be bytes")
return (seqno, from_id)
except (ValueError, SyntaxError) as e:
raise ValueError(f"Invalid message ID format: {e}")