AGB  ·  Datenschutz  ·  Impressum  







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

Überlauf bei int64

Ein Thema von Hobbycoder · begonnen am 22. Feb 2025 · letzter Beitrag vom 25. Feb 2025
 
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.735 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Überlauf bei int64

  Alt 22. Feb 2025, 17:34
Ich habe das mal Claude vorgelegt und der hat noch einen Fehler gefunden:

Zitat:
The most significant error is in the first multiplier: 16777246. This number appears to be incorrect. For converting IP addresses to integers, the correct multiplier should be 16777216 (which is 256³). The current value of 16777246 is off by 30, which can lead to incorrect results.
Und er gibt noch folgende Ratschläge:

Zitat:
To make the function more robust, you might also want to:
  • Add range checking to ensure each octet is between 0 and 255
  • Add error handling for malformed IP addresses
  • Consider using Cardinal or UInt32 instead of Int64 since IPv4 addresses fit in 32 bits
Alles durchaus sinnvoll.

Das eigentliche Problem hat er allerdings in seinem "korrigierten" Code nicht gelöst:

Delphi-Quellcode:
function IP2Int(value: string): Int64;
var
  s, v1, v2, v3, v4: string;
  i1, i2, i3, i4: Integer;
begin
  Result := 0;
  s := value;
  
  if Pos('.', s) > 0 then
  begin
    v1 := Copy(s, 1, pos('.', s)-1);
    s := Copy(s, Pos('.', s)+1, Length(s));
    if Pos('.', s) > 0 then
    begin
      v2 := Copy(s, 1, pos('.', s)-1);
      s := Copy(s, Pos('.', s)+1, Length(s));
      if Pos('.', s) > 0 then
      begin
        v3 := Copy(s, 1, pos('.', s)-1);
        v4 := Copy(s, Pos('.', s)+1, Length(s));
      end;
    end;
  end;
  
  if TryStrToInt(v1, i1) then
    if TryStrToInt(v2, i2) then
      if TryStrToInt(v3, i3) then
        if TryStrToInt(v4, i4) then
        begin
          Result := i1 * 16777216 + // Corrected from 16777246
                   i2 * 65536 +
                   i3 * 256 +
                   i4;
        end;
end;
Der Integer Overflow dürfte immer noch auftreten.
Thomas Mueller

Geändert von dummzeuch (23. Feb 2025 um 11:09 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 22:47 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