Преглед на файлове

* guard agains empty arrays in a few tArrayHelper binsearch methods
fixes bug #39761

(cherry picked from commit 471028193656a9e9221e93679ff35ba59b0e6e54)

marcoonthegit преди 3 години
родител
ревизия
745e109411
променени са 1 файла, в които са добавени 13 реда и са изтрити 0 реда
  1. 13 0
      packages/rtl-generics/src/generics.collections.pas

+ 13 - 0
packages/rtl-generics/src/generics.collections.pas

@@ -1055,6 +1055,13 @@ class function TArrayHelper<T>.BinarySearch(constref AValues: array of T; constr
 var
   imin, imax, imid: Int32;
 begin
+  if Length(AValues) = 0 then
+  begin
+    ASearchResult.CompareResult := 0;
+    ASearchResult.FoundIndex := -1;
+    ASearchResult.CandidateIndex := -1;
+    Exit(False);
+  end;
   // continually narrow search until just one element remains
   imin := AIndex;
   imax := Pred(AIndex + ACount);
@@ -1119,6 +1126,12 @@ var
   imin, imax, imid: Int32;
   LCompare: SizeInt;
 begin
+  if Length(AValues) = 0 then
+  begin
+    AFoundIndex := -1;
+    Exit(False);
+  end;
+
   // continually narrow search until just one element remains
   imin := AIndex;
   imax := Pred(AIndex + ACount);