aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-06-01 07:57:04 +0200
committerTristan Gingold <tgingold@free.fr>2022-06-01 07:57:04 +0200
commit0ba57d2457b8341c0ba912cdde12872a349da3b3 (patch)
treeff8532c5d2b36d3f2a891cc7d12cf9c4c1bdd0d2 /src
parenta9e699478dd0eae8d277fe25773fe5969bcf3cde (diff)
downloadghdl-0ba57d2457b8341c0ba912cdde12872a349da3b3.tar.gz
ghdl-0ba57d2457b8341c0ba912cdde12872a349da3b3.tar.bz2
ghdl-0ba57d2457b8341c0ba912cdde12872a349da3b3.zip
vhdl-parse: avoid a crash on too large numbers. For #2070
Diffstat (limited to 'src')
-rw-r--r--src/vhdl/vhdl-parse.adb9
-rw-r--r--src/vhdl/vhdl-parse_psl.adb8
2 files changed, 15 insertions, 2 deletions
diff --git a/src/vhdl/vhdl-parse.adb b/src/vhdl/vhdl-parse.adb
index 48c6de4c9..0266a494e 100644
--- a/src/vhdl/vhdl-parse.adb
+++ b/src/vhdl/vhdl-parse.adb
@@ -6320,7 +6320,14 @@ package body Vhdl.Parse is
Scan;
-- Resize.
- Resize_Bit_String (Res, Nat32 (Int));
+ if Int > 2048 then
+ -- What is a reasonable limit ?
+ Error_Msg_Parse
+ (Get_Token_Location,
+ "bit string size is too large (> 2048)");
+ else
+ Resize_Bit_String (Res, Nat32 (Int));
+ end if;
else
Error_Msg_Parse
(Get_Token_Location,
diff --git a/src/vhdl/vhdl-parse_psl.adb b/src/vhdl/vhdl-parse_psl.adb
index e456514bf..3d6d7101e 100644
--- a/src/vhdl/vhdl-parse_psl.adb
+++ b/src/vhdl/vhdl-parse_psl.adb
@@ -48,12 +48,18 @@ package body Vhdl.Parse_Psl is
function Parse_Number return Node
is
+ V : Int64;
Res : Node;
begin
if Current_Token = Tok_Integer then
Res := Create_Node_Loc (N_Number);
-- FIXME: handle overflow.
- Set_Value (Res, Uns32 (Current_Iir_Int64));
+ V := Current_Iir_Int64;
+ if V > Int64 (Uns32'Last) then
+ Error_Msg_Parse ("number if too large");
+ V := Int64 (Uns32'Last);
+ end if;
+ Set_Value (Res, Uns32 (V));
Scan;
return Res;
elsif Current_Token = Tok_Inf then