Ursache ist ein ungeprüfter Typecast.

#8110023
Lesenswert?
• ▲
▼

Nick schrieb:

Für C-Programmierer müsste man mal ein Programm schreiben, das sowas überprüft.

Man wird davon ausgehen können, daß der Kram nicht in C geschrieben ist. Die im Artikel erwähnte NegativeArraySizeException ist etwas, was es in Java gibt ...

Neuzeitlichere Compiler wie z.B. Clang/llvm haben eine deutlich bessere Quelltextprüfung, die lint nicht mehr unbedingt erforderlich machen.

#8110027
Lesenswert?
• ▲
▼

Harald K. schrieb:

ist etwas, was es in Java gibt

und die engine für Java ist in C geschrieben.

Harald K. schrieb:

Neuzeitlichere Compiler wie z.B. Clang/llvm haben eine deutlich bessere Quelltextprüfung,

Sowas lässt sich leicht schreiben, wenn man noch nie lint verwendet hat (Unterstellung). Lint kann so richtig nerven, bis jetzt ist mir das noch nicht bei C-Compilern untergekommen.

#8110128
Lesenswert?
• ▲
▼

Nick schrieb:

und die engine für Java ist in C geschrieben

Hier ist eher das Problem, dass Java keine unsigned integer Typen kennt.

Der Array-Konstruktor kriegt deshalb seine Längenangabe "signed" und muss sich zur Laufzeit mit einer Exception gegen negative Array-Längen wehren.

in C erwartet malloc ein (unsigned) size_t, negative Angaben sind also nicht möglich.

Macht es aber nicht besser, das ungeprüft übernommene Lägenfeld aus der WAP-Message wäre dann ein Out-of-Memory Fehler zur Laufzeit, wenn nicht behandelt mit demselben Resultat wie in Java.

#8110141
Lesenswert?
• ▲
▼

Sowohl Java als auch C sind stark typisierte Sprachen. Die Typen werden natürlich auch geprüft. Nur hat man hier halt einen expliziten Typcast gemacht. In Rust wäre etwas vergleichbares vermutlich, das "unsafe" Keyword zu nutzen. Irgend ein zusätzlicher Linter wäre hier auch nutzlos. Ein Linter ist eher was für dynamisch typisierte Sprachen.

Antwort schreiben

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.