[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.
This commit is contained in:
Justin Squirek 2020-04-30 08:55:33 -04:00 committed by Pierre-Marie de Rodat
parent 7841c99268
commit b64bea1830
2 changed files with 21 additions and 5 deletions

View File

@ -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;

View File

@ -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