AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Wert eines Defines merken und wiederherstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Wert eines Defines merken und wiederherstellen

Ein Thema von TurboMagic · begonnen am 17. Dez 2023 · letzter Beitrag vom 18. Dez 2023
Antwort Antwort
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.022 Beiträge
 
Delphi 12 Athens
 
#1

Wert eines Defines merken und wiederherstellen

  Alt 17. Dez 2023, 18:27
Hallo,

ein Nutzer der DEC (Delphi Encryption Compendium) hat einen Bug gemeldet,
der zu einem Integer Overflow führen kann.

Details siehe hier: https://github.com/MHumm/DelphiEncry...dium/issues/59

Mit dem dort skizzierten Testprogramm und einer > 600 MB Datei bekomme ich das in D12.0 nachvollzogen
und finde, dass es in TDECHash.Increment8 in DECHashBase.pas in der Unterprozedur AddC hier knallt:

Delphi-Quellcode:
  procedure AddC(var Value: UInt32; const Add: UInt32; var Carry: Boolean);
  begin
    if Carry then
    begin
      Value := Value + 1;
      Carry := (Value = 0); // we might cause another overflow by adding the carry bit
    end
    else
      Carry := False;

    Value := Value + Add;
    Carry := Carry or (Value < Add); // set Carry Flag on overflow or keep it if already set
  end;
Ok, packe ich das Value := Value + Add; in {$Q-} {$Q+} ein knallt es nicht mehr und auch alle
bisher funktionierenden unit Tests funktionieren weiter.

Nur: ich will ja nicht einfach $Q+ danach anmachen, egal ob es schon an war oder nicht.
Ich hab' mir jetzt das hier überlegt:

Delphi-Quellcode:
    {$IFDEF Q+}
      {$define USES_OVERFLOW_CHECKING}    
    {$ENDIF}

    {$Q-}
    Value := Value + Add;

    {$IFDEF USES_OVERFLOW_CHECKING}
      {$Q+}
      {$undefine USES_OVERFLOW_CHECKING}
     {$ENDIF}
    Carry := Carry or (Value < Add); // set Carry Flag on overflow or keep it if already set
Spricht da was dagegen?

Grüße
TurboMagic
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wert eines Defines merken und wiederherstellen

  Alt 17. Dez 2023, 18:39
Es gibt seit Jahren schon den Wunsch einer PUSH-Funktion, also vorher Zustand speichern und nachher wiederherstellen, aber neeeeeeeeeee

Vor allem, da diese Prüfung nur mit Einbuchstabigen Options funktioniert.


Nja, innerhalb eigener Units setze ich sowas zu Beginn der Unit und ein zurücksetzen ist (meistens) unnötig,
ansonsten mach ich das UNDEF auch zu Beginn ... immer alles in sich Konsistent, ohne dass man auf Vorhergehendes/Nachfolgendes achten muß.


Delphi-Quellcode:
    {$UNDEF USES_OVERFLOW_CHECKING}  // oder mit Else (vor allem beim Einzeiligen)
    {$IFOPT Q+}
      {$DEFINE USES_OVERFLOW_CHECKING}    
    {$ENDIF}

    {$Q-}
    Value := Value + Add;

    {$IFDEF USES_OVERFLOW_CHECKING}
      {$Q+}
    {$ENDIF}

Delphi-Quellcode:
    //{$UNDEF USES_OVERFLOW_CHECKING} {$IFOPT Q+} {$DEFINE USES_OVERFLOW_CHECKING} {$ENDIF}
    {$IFOPT Q+} {$DEFINE USES_OVERFLOW_CHECKING} {$ELSE} {$UNDEF USES_OVERFLOW_CHECKING} {$ENDIF}
    {$Q-}
    Value := Value + Add;
    {$IFDEF USES_OVERFLOW_CHECKING} {$Q+} {$ENDIF}
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.022 Beiträge
 
Delphi 12 Athens
 
#3

AW: Wert eines Defines merken und wiederherstellen

  Alt 17. Dez 2023, 18:57
Danke! Habe deine untere Variante mit leicht geänderter Formatierung jetzt übernommen.
Splittet man das in mehrere Zeilen zeigt einem die IDE nun schön welche der beiden Varianten aktiv ist
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#4

AW: Wert eines Defines merken und wiederherstellen

  Alt 17. Dez 2023, 19:16
Ohhh, och muß zugeben, dass ich beim neuen ausgegrauten Highlighting noch garnicht nachgesehn hab, wie es jetzt aussieht.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.022 Beiträge
 
Delphi 12 Athens
 
#5

AW: Wert eines Defines merken und wiederherstellen

  Alt 17. Dez 2023, 21:07
Das funktioniert nur, wenn das auszugrauende in einer separaten Zeile steht!
Darum hab' ich deine Lösung leicht umformatiert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#6

AW: Wert eines Defines merken und wiederherstellen

  Alt 17. Dez 2023, 21:08
und ich dachte Emba hätte es richtig eingebaut
Ein Therapeut entspricht 1024 Gigapeut.
  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 23:50 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 by Thomas Breitkreuz