From 41b5c0218e2816f9702b89436ae346fb8c8ae5a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=A2=D1=80=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Wed, 12 Aug 2026 17:49:05 +0300 Subject: [PATCH] Defensive: try/except around decode in _row_to_message Decode errors now log to stderr instead of crashing the entire API response. This prevents a single malformed message from hiding all subsequent messages in the same query. --- simtrace2_pysniff/server/database.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/simtrace2_pysniff/server/database.py b/simtrace2_pysniff/server/database.py index c9b0722..938b0aa 100644 --- a/simtrace2_pysniff/server/database.py +++ b/simtrace2_pysniff/server/database.py @@ -177,6 +177,11 @@ class Database: 'flags': row[5], } if row[3] in ('tpdu', 'change', 'fidi', 'atr', 'pps') and data_blob: - from .decode import decode_sniff_msg - msg['decoded'] = decode_sniff_msg(data_blob, row[3]) + try: + from .decode import decode_sniff_msg + msg['decoded'] = decode_sniff_msg(data_blob, row[3]) + except Exception as e: + import sys + print(f'Decode error for msg {row[0]} ({row[3]}, {len(data_blob)} bytes): {e}', + file=sys.stderr) return msg