[Ada] Avoid a stack overflow in 'Value for invalid long strings
authorNicolas Roche <roche@adacore.com>
Mon, 11 Jun 2018 09:16:32 +0000 (09:16 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 11 Jun 2018 09:16:32 +0000 (09:16 +0000)
2018-06-11  Nicolas Roche  <roche@adacore.com>

gcc/ada/

* libgnat/s-valuti.adb (Bad_Value): Ensure that we do not generate a
stack overflow while raising a constraint error.

From-SVN: r261396

gcc/ada/ChangeLog
gcc/ada/libgnat/s-valuti.adb

index e2191200c1e0c32bb69e9337ae44db5d37b13007..5b13f28f0dbf2cce231cc15e5cb1cb41a8fd9abf 100644 (file)
@@ -1,3 +1,8 @@
+2018-06-11  Nicolas Roche  <roche@adacore.com>
+
+       * libgnat/s-valuti.adb (Bad_Value): Ensure that we do not generate a
+       stack overflow while raising a constraint error.
+
 2018-06-11  Eric Botcazou  <ebotcazou@adacore.com>
 
        * repinfo.ads (Rep_Value): Use a single line.
index 8071fcabf362174ac4d07eab39e7795038d33b8a..3070f3122574aa1f386c6eb8c7e55978cc763c15 100644 (file)
@@ -39,7 +39,15 @@ package body System.Val_Util is
 
    procedure Bad_Value (S : String) is
    begin
-      raise Constraint_Error with "bad input for 'Value: """ & S & '"';
+      --  Bad_Value might be called with very long strings allocated on the
+      --  heap. Limit the size of the message so that we avoid creating a
+      --  Storage_Error during error handling.
+      if S'Length > 127 then
+         raise Constraint_Error with "bad input for 'Value: """
+         & S (S'First .. S'First + 127) & "...""";
+      else
+         raise Constraint_Error with "bad input for 'Value: """ & S & '"';
+      end if;
    end Bad_Value;
 
    ----------------------