Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Stacktrace on badly formed CAN_ErrorFrame (?)

Offen
#1,913 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Anfängerfreundlichkeit
45/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
python
Bereich
data

Rechercherichtung

Beginne in can/io/mf4.py ungefähr bei Zeile 410, wo auf CAN_ErrorFrame.DataBytes anhand der gemeldeten DataLength zugegriffen wird. Reproduziere das Problem mit der Kvaser-MF4-Datei und untersuche die Form und den Wert von CAN_ErrorFrame.DataBytes vor diesem Zugriff. Als abgeschlossen gilt die Aufgabe, wenn can.LogReader den Fehler-Frame verarbeitet, ohne IndexError auszulösen, und die bereitgestellte Iteration funktioniert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug

Describe the bug

We have an MF4 file from Kvaser that causes the following stack trace when run:

Traceback (most recent call last):
  File "load.py", line 43, in <module>
    sys.exit(main(args))
  File "load.py", line 27, in main
    for msg in can.LogReader(args.mf4_file):
  File "/home/john/.pyenv/versions/3.8.20/lib/python3.8/heapq.py", line 373, in merge
    value = next()
  File "/home/john/tmp/keep_1y/python-can/can/io/mf4.py", line 410, in __iter__
    kv["data"] = data["CAN_ErrorFrame.DataBytes"][i][
IndexError: invalid index to scalar variable.

The test code is essentially:

for msg in can.LogReader(mf4_file):
    if msg.is_error_frame:
        count["error"] += 1
    else:
        count["other"] += 1

I put some debug at site of the error (line 407 of can/io/mf4.py):

data_length=4
data["CAN_ErrorFrame.DataBytes"][i]=16777216

2^24?

To Reproduce

I was unable to create a file with python-can with the error data.

Expected behavior

No crash. :)

Additional context

OS and version: Linux
Python version: 3.8.20
python-can version: 654a02ae 2024-11-28 | Changelog for v4.5.0 (#1897) (HEAD -> main, origin/main, origin/HEAD)
python-can interface/s (if applicable): None

Traceback and logs

If I make this hack it consumes the error frame:

diff --git a/can/io/mf4.py b/can/io/mf4.py
index 4f5336b4..099395b4 100644
--- a/can/io/mf4.py
+++ b/can/io/mf4.py
@@ -405,9 +405,9 @@ class MF4Reader(BinaryIOMessageReader):
                         and "CAN_ErrorFrame.DataBytes" in names
                     ):
                         data_length = int(data["CAN_ErrorFrame.DataLength"][i])
-                        kv["data"] = data["CAN_ErrorFrame.DataBytes"][i][
+                        kv["data"] = data["CAN_ErrorFrame.DataBytes"][i].tobytes()[
                             :data_length
-                        ].tobytes()
+                        ]

                     yield Message(**kv)
Vorherrschende Sprache
Python
Sterne
1.6k
Forks
697
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus hardbyte/python-can

Alle Issues in hardbyte/python-can

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.