diff options
author | Justin Squirek <squirek@adacore.com> | 2020-04-30 08:55:33 -0400 |
---|---|---|
committer | Pierre-Marie de Rodat <derodat@adacore.com> | 2020-06-19 04:17:19 -0400 |
commit | b64bea1830d8fa651843f4e5e5c04263746b06af (patch) | |
tree | f235ccaa5acb3e8bb5fd844ec52b250ebdac0160 | |
parent | 7841c99268adfaba9c30be23ce7569c85cae52dc (diff) | |
download | gcc-b64bea1830d8fa651843f4e5e5c04263746b06af.zip gcc-b64bea1830d8fa651843f4e5e5c04263746b06af.tar.gz gcc-b64bea1830d8fa651843f4e5e5c04263746b06af.tar.bz2 |
[Ada] Style checks on invalid UTF character cause crash
2020-06-19 Justin Squirek <squirek@adacore.com>
gcc/ada/
* widechar.adb, widechar.ads (Skip_Wide): Catch validity check
failure when skipping over characters, and update comment to
reflect Skip_Wide's usage in error printing.
-rw-r--r-- | gcc/ada/widechar.adb | 22 | ||||
-rw-r--r-- | gcc/ada/widechar.ads | 4 |
2 files changed, 21 insertions, 5 deletions
diff --git a/gcc/ada/widechar.adb b/gcc/ada/widechar.adb index b7e73a1..3d3ebaf 100644 --- a/gcc/ada/widechar.adb +++ b/gcc/ada/widechar.adb @@ -203,7 +203,16 @@ package body Widechar is -- Start of processing for Skip_Wide begin - Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method); + -- Capture invalid wide characters errors since we are going to discard + -- the result anyway. We just want to move past it. + + begin + Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method); + exception + when Constraint_Error => + null; + end; + Wide_Char_Byte_Count := Wide_Char_Byte_Count + Nat (P - P_Init - 1); end Skip_Wide; @@ -235,7 +244,16 @@ package body Widechar is -- Start of processing for Skip_Wide begin - Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method); + -- Capture invalid wide characters errors since we are going to discard + -- the result anyway. We just want to move past it. + + begin + Discard := WC_Skip (Skip_Char, Wide_Character_Encoding_Method); + exception + when Constraint_Error => + null; + end; + Wide_Char_Byte_Count := Wide_Char_Byte_Count + Nat (P - P_Init - 1); end Skip_Wide; diff --git a/gcc/ada/widechar.ads b/gcc/ada/widechar.ads index d3d4fc2..f81a19b 100644 --- a/gcc/ada/widechar.ads +++ b/gcc/ada/widechar.ads @@ -81,9 +81,7 @@ package Widechar is -- On entry, S (P) points to an ESC character for a wide character escape -- sequence or to an upper half character if the encoding method uses the -- upper bit, or to a left bracket if the brackets encoding method is in - -- use. On exit, P is bumped past the wide character sequence. No error - -- checking is done, since this is only used on escape sequences generated - -- by Set_Wide, which are known to be correct. + -- use. On exit, P is bumped past the wide character sequence. procedure Skip_Wide (S : Source_Buffer_Ptr; P : in out Source_Ptr); -- Similar to the above procedure, but operates on a source buffer |