From: Joffrey Huguet <hug...@adacore.com> The precondition of both Update procedures in Interfaces.C.Strings were incorrect. This patch fixes this.
gcc/ada/ * libgnat/i-cstrin.ads (Update): Fix precondition. Tested on x86_64-pc-linux-gnu, committed on master. --- gcc/ada/libgnat/i-cstrin.ads | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/gcc/ada/libgnat/i-cstrin.ads b/gcc/ada/libgnat/i-cstrin.ads index 9f1577f5e14..3f55ddfbdc5 100644 --- a/gcc/ada/libgnat/i-cstrin.ads +++ b/gcc/ada/libgnat/i-cstrin.ads @@ -121,8 +121,9 @@ is with Pre => Item /= Null_Ptr - and then Strlen (Item) <= size_t'Last - Offset - and then Strlen (Item) + Offset <= Chars'Length, + and then (Chars'First /= 0 or else Chars'Last /= size_t'Last) + and then Chars'Length <= size_t'Last - Offset + and then Chars'Length + Offset <= Strlen (Item), Global => (In_Out => C_Memory); procedure Update @@ -133,8 +134,8 @@ is with Pre => Item /= Null_Ptr - and then Strlen (Item) <= size_t'Last - Offset - and then Strlen (Item) + Offset <= Str'Length, + and then Str'Length <= size_t'Last - Offset + and then Str'Length + Offset <= Strlen (Item), Global => (In_Out => C_Memory); Update_Error : exception; -- 2.43.0