From 2bde1ddca448544a621c672864cc60849d4d6d2d Mon Sep 17 00:00:00 2001 From: pasta Date: Tue, 12 Mar 2024 15:18:24 -0500 Subject: [PATCH] Merge #5927: fix: check if message can be handled before attempting to deserialize afbae06520645b6a2a87bbef32234e1e6b1790a7 fix: check if message can be handled before attempting to deserialize (thephez) Pull request description: ## Issue being fixed or feature implemented Currently `message-capture-parser.py` crashes when encountering certain messages (e.g. mnauth). This at least makes it possible to run the script without crashing. There may be better options for solving this. ## What was done? Check if the dictionary is going to return `None` before we attempt to do something further with it. Hide whitespace changes to see the few lines that were added: https://github.com/dashpay/dash/pull/5927/files?diff=unified&w=1 ## How Has This Been Tested? Running script locally ## Breaking Changes N/A ## Checklist: _Go over all the following points, and put an `x` in all the boxes that apply._ - [x] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have added or updated relevant unit/integration/functional/e2e tests - [ ] I have made corresponding changes to the documentation - [ ] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ Top commit has no ACKs. Tree-SHA512: 041af57afcfd1d93487fd41d34a50e3a99f7fa129563dfe1e1cf2498974c8e658bd6acb9c810887c841160074056ba999e9b6607ac9336b98b9d42806682c607 --- contrib/message-capture/message-capture-parser.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/contrib/message-capture/message-capture-parser.py b/contrib/message-capture/message-capture-parser.py index 33759ee713..b416c11302 100755 --- a/contrib/message-capture/message-capture-parser.py +++ b/contrib/message-capture/message-capture-parser.py @@ -122,8 +122,8 @@ def process_file(path: str, messages: List[Any], recv: bool, progress_bar: Optio msg_ser = BytesIO(f_in.read(length)) # Determine message type - if msgtype not in MESSAGEMAP: - # Unrecognized message type + if msgtype not in MESSAGEMAP or MESSAGEMAP[msgtype] is None: + # Unrecognized or unhandled message type try: msgtype_tmp = msgtype.decode() if not msgtype_tmp.isprintable(): @@ -131,10 +131,11 @@ def process_file(path: str, messages: List[Any], recv: bool, progress_bar: Optio msg_dict["msgtype"] = msgtype_tmp except UnicodeDecodeError: msg_dict["msgtype"] = "UNREADABLE" + err_str = "Unrecognized" if msgtype not in MESSAGEMAP else "Unhandled" msg_dict["body"] = msg_ser.read().hex() - msg_dict["error"] = "Unrecognized message type." + msg_dict["error"] = f"{err_str} message type" messages.append(msg_dict) - print(f"WARNING - Unrecognized message type {msgtype} in {path}", file=sys.stderr) + print(f"WARNING - {msg_dict['error']} {msgtype} in {path}", file=sys.stderr) continue # Deserialize the message