Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
Delphi 12 Athens
|
AW: Textdatei laden - Integerüberlauf
16. Jul 2020, 21:35
Das LoadFromString/LoadFromStream ist in der Regel für die Begrenzung zuständig.
Delphi-Quellcode:
procedure TStrings.LoadFromStream(Stream: TStream; Encoding: TEncoding);
var
Size: Integer;
Buffer: TBytes;
begin
BeginUpdate;
try
Size := Stream.Size - Stream.Position;
SetLength(Buffer, Size);
Stream.Read(Buffer, 0, Size);
Size := TEncoding.GetBufferEncoding(Buffer, Encoding, FDefaultEncoding);
SetEncoding(Encoding); // Keep Encoding in case the stream is saved
SetTextStr(Encoding.GetString(Buffer, Size, Length(Buffer) - Size));
finally
EndUpdate;
end;
end;
Obwohl Stream.Size und Stream.Position als Int64 deklariert sind, wird für die Differenz nur ein Integer bereitgestellt. Das nachfolgende SetLength muss dann noch einen zusammenhängenden Speicherbereich in der gewünschten Größe finden, was unter 32-Bit schnell mal zum problem werden kann. Aber auch dieses SetLength beschränkt die Puffergröße auf 2GB, weil NewLength auch nur ein Integer ist.
Allerdings sehe ich in diesem konkreten Fall erstmal keine dieser Grenzen überschritten.
Wäre das aber nicht trotzdem ein Kandidat für eine kleine Codeänderung durch EMBT?
|
|
Zitat
|