From cfd2262668862167cbe102ffbe87f127599be7a8 Mon Sep 17 00:00:00 2001 From: Joffrey Huguet Date: Thu, 12 May 2022 11:53:54 +0200 Subject: [PATCH] [Ada] Fix preconditions of Interfaces.C.Strings Preconditions of Update procedures were always true when Offset was 0. The changes enable to protect from Update_Error when Offset is 0. gcc/ada/ * libgnat/i-cstrin.ads (Update): Update precondition. --- gcc/ada/libgnat/i-cstrin.ads | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gcc/ada/libgnat/i-cstrin.ads b/gcc/ada/libgnat/i-cstrin.ads index faad7a0b73b..12fa3012ff0 100644 --- a/gcc/ada/libgnat/i-cstrin.ads +++ b/gcc/ada/libgnat/i-cstrin.ads @@ -120,7 +120,10 @@ is with Pre => Item /= Null_Ptr - and then (if Check then Offset <= Strlen (Item) - Chars'Length), + and then + (if Check then + Strlen (Item) <= size_t'Last - Offset + and then Strlen (Item) + Offset <= Chars'Length), Global => (In_Out => C_Memory); procedure Update @@ -131,7 +134,10 @@ is with Pre => Item /= Null_Ptr - and then (if Check then Offset <= Strlen (Item) - Str'Length), + and then + (if Check then + Strlen (Item) <= size_t'Last - Offset + and then Strlen (Item) + Offset <= Str'Length), Global => (In_Out => C_Memory); Update_Error : exception; -- 2.47.2