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

String::toInt() and atol() behave different on different platforms with a number that is too large.

Offen
#175 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
48/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
cpp
Bereich
embedded-iot

Rechercherichtung

Beginnen Sie in String.cpp bei String::toInt() und prüfen Sie, wie sich atol() bei Werten außerhalb des long-Bereichs der Plattform verhält. Vergleichen Sie das vorgeschlagene strtol() und die errno-Behandlung auf 8-Bit- und 32-Bit-Plattformen; das Issue ist abgeschlossen, wenn übergroße Eingaben konsistente, dokumentierte Ergebnisse liefern, ohne LONG_MAX oder LONG_MIN falsch zu behandeln.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

bug

User axemaster found strange behavior when using String::toInt() with a number that is too large. See the topic in the Arduino forum: https://forum.arduino.cc/t/toint-bug-how-unfortunate/1041669.
The result is different for 8-bit and 32-bit platforms.
It was narrowed down to the undefined behaviour of atol() when a number is too large to fit in a long.

The atol() in String::toInt() in String.cpp could be replaced by strtol() followed by a check for LONG_MAX or LONG_MIN and return zero if that happens. The documentation can stay as it is, because it will return a long, and zero if something is wrong.
To allow LONG_MAX and LONG_MIN as valid input numbers, the errno has to be used. I don't know how that will hold up in a multitasking environment.

Vorherrschende Sprache
C++
Sterne
308
Forks
152
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

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 arduino/ArduinoCore-API

Alle Issues in arduino/ArduinoCore-API

Ähnliche Issues

Weitere Issues zu C++

Neue Issues direkt in Ihr Postfach

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