Skip to content

Commit e57db6b

Browse files
authored
Merge pull request #3 from skamradt/main
Corrected Integer Overflow decoding an encoded value of $FFFFFFFFFFFF…
2 parents a3efb87 + 1caa96b commit e57db6b

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/sqids.pas

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ function TSqids.ToNumber(AId: string; AAlphabet: string): TNumber;
185185
L := Length(AAlphabet);
186186

187187
for C in AId do
188-
Result := Result * L + TNumber(Pos(C, AAlphabet)) - 1;
188+
Result := Result * L + (TNumber(Pos(C, AAlphabet)) - 1);
189189
end;
190190

191191
function TSqids.IsBlocked(AId: string): Boolean;

tests/delphi/encoding.pas

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ TTestEncoding = class(TTestCase)
2222
procedure IdWithInvalidCharacter;
2323
// out-of-range test not implemented:
2424
// compiler enforces that all numbers are within the range of a TNumber
25+
procedure ExtremeValue;
2526
end;
2627

2728
implementation
@@ -180,6 +181,20 @@ procedure TTestEncoding.EmptyString;
180181
end;
181182
end;
182183

184+
procedure TTestEncoding.ExtremeValue;
185+
const
186+
Number: TNumber = $FFFFFFFFFFFFFFFF;
187+
Id = 'eIkvoXH40Lmd'; // from a previous EncodeSingle
188+
begin
189+
with TSqids.Create do
190+
try
191+
CheckEquals(EncodeSingle(Number), Id);
192+
CheckTrue(DecodeSingle(id)=Number);
193+
finally
194+
Free;
195+
end;
196+
end;
197+
183198
procedure TTestEncoding.IdWithInvalidCharacter;
184199
begin
185200
with TSqids.Create do

0 commit comments

Comments
 (0)