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
Antwort Antwort
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#1

AW: TStream.ReadBuffer schlägt fehl

  Alt 7. Apr 2022, 17:21
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.
Aber wie ich inzwischen geschrieben habe, geht bereits die Dimensionierung von TBytes nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

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
Benmik

Registriert seit: 11. Apr 2009
578 Beiträge
 
Delphi 12 Athens
 
#3

AW: TStream.ReadBuffer schlägt fehl

  Alt 8. Apr 2022, 10:09
Ich glaub's ja nicht. Wie kann man sowas machen.

EDIT: Und auch gleich mal den nächsten Fehler gekillt: Write durch Write64 ersetzt...
F1 informiert über Read64/Write64: "Embarcadero Technologies does not currently have any additional information" Oh, da fiele mir schon was ein...
Angehängte Grafiken
Dateityp: jpg Read.jpg (32,5 KB, 20x aufgerufen)
Dateityp: jpg ReadBuffer.jpg (27,7 KB, 17x aufgerufen)

Geändert von Benmik ( 8. Apr 2022 um 11:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:32 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