Ver Fonte

sync libraries with parent repo.

Ugochukwu Mmaduekwe há 6 anos atrás
pai
commit
438cb90581

+ 25 - 19
src/libraries/cryptolib4pascal/ClpBits.pas

@@ -259,20 +259,6 @@ begin
 {$ENDIF FPC}
 end;
 
-class function TBits.RotateLeft8(a_value: Byte; a_n: Int32): Byte;
-begin
-{$IFDEF DEBUG}
-  System.Assert(a_n >= 0);
-{$ENDIF DEBUG}
-{$IFDEF FPC}
-  Result := RolByte(a_value, a_n);
-{$ELSE}
-  a_n := a_n and 7;
-
-  Result := (a_value shl a_n) or (a_value shr (8 - a_n));
-{$ENDIF FPC}
-end;
-
 class function TBits.NegativeLeftShift32(Value: UInt32;
   ShiftBits: Int32): UInt32;
 begin
@@ -300,6 +286,21 @@ begin
   Result := Value shr (64 + ShiftBits);
 end;
 
+class function TBits.RotateLeft8(a_value: Byte; a_n: Int32): Byte;
+begin
+{$IFDEF DEBUG}
+  System.Assert(a_n >= 0);
+{$ENDIF DEBUG}
+{$IFDEF FPC}
+  Result := RolByte(a_value, a_n);
+{$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
+  a_n := a_n and 7;
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
+  Result := (a_value shl a_n) or (a_value shr (8 - a_n));
+{$ENDIF FPC}
+end;
+
 class function TBits.RotateLeft32(a_value: UInt32; a_n: Int32): UInt32;
 begin
 {$IFDEF DEBUG}
@@ -308,8 +309,9 @@ begin
 {$IFDEF FPC}
   Result := RolDWord(a_value, a_n);
 {$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
   a_n := a_n and 31;
-
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shl a_n) or (a_value shr (32 - a_n));
 {$ENDIF FPC}
 end;
@@ -322,8 +324,9 @@ begin
 {$IFDEF FPC}
   Result := RolQWord(a_value, a_n);
 {$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
   a_n := a_n and 63;
-
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shl a_n) or (a_value shr (64 - a_n));
 {$ENDIF FPC}
 end;
@@ -336,8 +339,9 @@ begin
 {$IFDEF FPC}
   Result := RorByte(a_value, a_n);
 {$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
   a_n := a_n and 7;
-
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shr a_n) or (a_value shl (8 - a_n));
 {$ENDIF FPC}
 end;
@@ -350,8 +354,9 @@ begin
 {$IFDEF FPC}
   Result := RorDWord(a_value, a_n);
 {$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
   a_n := a_n and 31;
-
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shr a_n) or (a_value shl (32 - a_n));
 {$ENDIF FPC}
 end;
@@ -364,8 +369,9 @@ begin
 {$IFDEF FPC}
   Result := RorQWord(a_value, a_n);
 {$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
   a_n := a_n and 63;
-
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shr a_n) or (a_value shl (64 - a_n));
 {$ENDIF FPC}
 end;

+ 6 - 0
src/libraries/cryptolib4pascal/CryptoLib.inc

@@ -120,6 +120,12 @@
 // XE3 and Below
 {$IF CompilerVersion <= 24.0}
 {$DEFINE DELPHIXE3_DOWN}
+{$IFEND}
+
+ // XE4 and Above
+{$IF CompilerVersion >= 25.0}
+{$DEFINE DELPHIXE4_UP}
+{$DEFINE SHIFT_OVERFLOW_BUG_FIXED}
 {$IFEND}
 
   // XE7 and Above

+ 6 - 0
src/libraries/hashlib4pascal/HashLib.inc

@@ -103,6 +103,12 @@
 // XE3 and Below
 {$IF CompilerVersion <= 24.0}
 {$DEFINE DELPHIXE3_DOWN}
+{$IFEND}
+
+ // XE4 and Above
+{$IF CompilerVersion >= 25.0}
+{$DEFINE DELPHIXE4_UP}
+{$DEFINE SHIFT_OVERFLOW_BUG_FIXED}
 {$IFEND}
 
   // XE7 and Above

+ 16 - 10
src/libraries/hashlib4pascal/HlpBits.pas

@@ -182,8 +182,9 @@ begin
 {$IFDEF FPC}
   Result := RolByte(a_value, a_n);
 {$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
   a_n := a_n and 7;
-
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shl a_n) or (a_value shr (8 - a_n));
 {$ENDIF FPC}
 end;
@@ -196,8 +197,9 @@ begin
 {$IFDEF FPC}
   Result := RolDWord(a_value, a_n);
 {$ELSE}
- // a_n := a_n and 31;
-
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
+  a_n := a_n and 31;
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shl a_n) or (a_value shr (32 - a_n));
 {$ENDIF FPC}
 end;
@@ -210,8 +212,9 @@ begin
 {$IFDEF FPC}
   Result := RolQWord(a_value, a_n);
 {$ELSE}
- // a_n := a_n and 63;
-
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
+  a_n := a_n and 63;
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shl a_n) or (a_value shr (64 - a_n));
 {$ENDIF FPC}
 end;
@@ -224,8 +227,9 @@ begin
 {$IFDEF FPC}
   Result := RorByte(a_value, a_n);
 {$ELSE}
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
   a_n := a_n and 7;
-
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shr a_n) or (a_value shl (8 - a_n));
 {$ENDIF FPC}
 end;
@@ -238,8 +242,9 @@ begin
 {$IFDEF FPC}
   Result := RorDWord(a_value, a_n);
 {$ELSE}
- // a_n := a_n and 31;
-
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
+  a_n := a_n and 31;
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shr a_n) or (a_value shl (32 - a_n));
 {$ENDIF FPC}
 end;
@@ -252,8 +257,9 @@ begin
 {$IFDEF FPC}
   Result := RorQWord(a_value, a_n);
 {$ELSE}
- // a_n := a_n and 63;
-
+{$IFNDEF SHIFT_OVERFLOW_BUG_FIXED}
+  a_n := a_n and 63;
+{$ENDIF SHIFT_OVERFLOW_BUG_FIXED}
   Result := (a_value shr a_n) or (a_value shl (64 - a_n));
 {$ENDIF FPC}
 end;