Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Stacktrace on badly formed CAN_ErrorFrame (?)

Ouverte
#1,913 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
45/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
data

Piste de recherche

Commencez dans can/io/mf4.py vers la ligne 410, où CAN_ErrorFrame.DataBytes est indexé à l’aide de la valeur DataLength indiquée. Reproduisez le problème avec le fichier MF4 de Kvaser et examinez la forme et la valeur de CAN_ErrorFrame.DataBytes avant cet accès. C’est terminé lorsque can.LogReader consomme la trame d’erreur sans lever d’IndexError et que l’itération fournie fonctionne.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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)
Langage dominant
Python
Étoiles
1.6k
Forks
697
Métriques de merge des PR
Aucune PR mergée en 30 j

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de hardbyte/python-can

Toutes les issues de hardbyte/python-can

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.