aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFedor Rybin <frybin@adacore.com>2021-06-04 21:01:27 +0300
committerPierre-Marie de Rodat <derodat@adacore.com>2021-07-09 12:35:28 +0000
commit90635a37c2d0e0468c3599398c5f8eeecf596f93 (patch)
tree151935a3689302520747dbffb95701e721ae0a0f
parente4a6acd67ef7ab110b7f575b22019554819af0cc (diff)
downloadgcc-90635a37c2d0e0468c3599398c5f8eeecf596f93.zip
gcc-90635a37c2d0e0468c3599398c5f8eeecf596f93.tar.gz
gcc-90635a37c2d0e0468c3599398c5f8eeecf596f93.tar.bz2
[Ada] Fix index range violations in krunch
gcc/ada/ * krunch.adb: Add safeguards against index range violations.
-rw-r--r--gcc/ada/krunch.adb17
1 files changed, 9 insertions, 8 deletions
diff --git a/gcc/ada/krunch.adb b/gcc/ada/krunch.adb
index 4cff3ca..f698d88 100644
--- a/gcc/ada/krunch.adb
+++ b/gcc/ada/krunch.adb
@@ -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;