]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Fix index range violations in krunch
authorFedor Rybin <frybin@adacore.com>
Fri, 4 Jun 2021 18:01:27 +0000 (21:01 +0300)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 9 Jul 2021 12:35:28 +0000 (12:35 +0000)
gcc/ada/

* krunch.adb: Add safeguards against index range violations.

gcc/ada/krunch.adb

index 4cff3ca13abe1fb8bf2ddb9807a4615846ccd312..f698d889c22d0bd6c94a8b331904c425cc215ccb 100644 (file)
@@ -92,15 +92,16 @@ begin
       Startloc := 3;
       Buffer (2 .. Len - 5) := Buffer (7 .. Len);
       Curlen := Len - 5;
-      if Buffer (Curlen - 2 .. Curlen) = "128"
-        or else Buffer (3 .. 9) = "exn_lll"
-        or else Buffer (3 .. 9) = "exp_lll"
-        or else Buffer (3 .. 9) = "img_lll"
-        or else Buffer (3 .. 9) = "val_lll"
-        or else Buffer (3 .. 9) = "wid_lll"
-        or else (Buffer (3 .. 6) = "pack" and then Curlen = 10)
+      if (Curlen >= 3 and then Buffer (Curlen - 2 .. Curlen) = "128")
+        or else (Len >= 9 and then
+                    (Buffer (3 .. 9) = "exn_lll"
+                      or else Buffer (3 .. 9) = "exp_lll"
+                      or else Buffer (3 .. 9) = "img_lll"
+                      or else Buffer (3 .. 9) = "val_lll"
+                      or else Buffer (3 .. 9) = "wid_lll"))
+           or else (Curlen = 10 and then Buffer (3 .. 6) = "pack")
       then
-         if Buffer (3 .. 15) = "compare_array" then
+         if Len >= 15 and then Buffer (3 .. 15) = "compare_array" then
             Buffer (3 .. 4) := "ca";
             Buffer (5 .. Curlen - 11) := Buffer (16 .. Curlen);
             Curlen := Curlen - 11;