AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStream.ReadBuffer schlägt fehl

Ein Thema von Benmik · begonnen am 7. Apr 2022 · letzter Beitrag vom 8. Apr 2022
 
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.046 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: TStream.ReadBuffer schlägt fehl

  Alt 7. Apr 2022, 22:28
Mal geguckt, was Read für'n Rückgabetyp hat und welchen Typ der Count Parameter hat?
Ja, Count hat NativeInt und der Rückgabewert von Read ist LongInt.
Hoecker, sie sind raus. (siehe Screenshot im Anhang)

Das ist leider eine der vielen Stellen, die unter 64bit ein bissle defekt sind. Der Count Parameter von ReadBuffer is zwar NativeInt, aber net der von Read. Somit passiert hier nen impliziter Cast mit potenziellem Datenverlust. Und wenn alles ziemlich in die Hose geht, übergibt man da nen Integer, bei dem das höchste bit 1 ist (weils nunmal die unteren 32bit des 64bit NativeInts sind) was einen negativen Integer ergibt.

Aber weil ja alles abwärtskompatibel sein muss, kann man diese Bugs in den Signaturen nicht so einfach fixen.

TFile.DoReadAllBytes ist übrigens auch schon defekt, denn LFileStream.Size ist Int64, aber auf 32bit kann man nur einen Integer an SetLength übergeben. Da die RTL aber ohne Range und Overflow checks gebaut wird, passiert hier potenziell dasselbe wie oben erklärt, wenn ich unter 32bit ne Datei lesen möchte die größer als 2^31-1 Bytes ist, dann landet hier Grütze im SetLength und es kommen irgendwelche Fehler aber sicher kein "Hey die Datei is zu groß"

Wenn Embarcadero beim Kompilieren ihres Sourcecodes W1071-W1073 anschalten würde, dann würds aufleuchten wie nen Weihnachtsbaum.
Angehängte Grafiken
Dateityp: png ReadBuffer.png (25,6 KB, 27x aufgerufen)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 7. Apr 2022 um 22:40 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz