From ca70a1049ff18c8702fdc2ac4b3901685551cb28 Mon Sep 17 00:00:00 2001 From: whitequark Date: Mon, 6 Apr 2020 10:32:02 +0000 Subject: [PATCH 1/3] read_ilang: detect overflow of integer literals. --- frontends/ilang/ilang_lexer.l | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/frontends/ilang/ilang_lexer.l b/frontends/ilang/ilang_lexer.l index 4fd0ae855..e36818e4f 100644 --- a/frontends/ilang/ilang_lexer.l +++ b/frontends/ilang/ilang_lexer.l @@ -29,6 +29,7 @@ #pragma clang diagnostic ignored "-Wdeprecated-register" #endif +#include #include "frontends/ilang/ilang_frontend.h" #include "ilang_parser.tab.hh" @@ -88,7 +89,16 @@ USING_YOSYS_NAMESPACE "."[0-9]+ { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_ID; } [0-9]+'[01xzm-]* { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_VALUE; } --?[0-9]+ { rtlil_frontend_ilang_yylval.integer = atoi(yytext); return TOK_INT; } +-?[0-9]+ { + char *end = NULL; + long value = strtol(yytext, &end, 10); + if (end != yytext + strlen(yytext)) + return TOK_INVALID; // literal out of range of long + if (value < INT_MIN || value > INT_MAX) + return TOK_INVALID; // literal out of range of int (relevant mostly for LP64 platforms) + rtlil_frontend_ilang_yylval.integer = value; + return TOK_INT; +} \" { BEGIN(STRING); } \\. { yymore(); } From d22888ce746b7e1afef9b797cf2aeef1542247cb Mon Sep 17 00:00:00 2001 From: whitequark Date: Mon, 6 Apr 2020 10:32:50 +0000 Subject: [PATCH 2/3] read_ilang: improve error message for overly long wires. Fixes #1838. --- frontends/ilang/ilang_parser.y | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontends/ilang/ilang_parser.y b/frontends/ilang/ilang_parser.y index 4e0b62edd..91adc0cc9 100644 --- a/frontends/ilang/ilang_parser.y +++ b/frontends/ilang/ilang_parser.y @@ -179,6 +179,9 @@ wire_options: wire_options TOK_WIDTH TOK_INT { current_wire->width = $3; } | + wire_options TOK_WIDTH TOK_INVALID { + rtlil_frontend_ilang_yyerror("ilang error: invalid wire width"); + } | wire_options TOK_UPTO { current_wire->upto = true; } | From b494d4c6565bcf0ef063e632a51b215e199ea22e Mon Sep 17 00:00:00 2001 From: whitequark Date: Mon, 6 Apr 2020 18:31:15 +0000 Subject: [PATCH 3/3] read_ilang: improve style. NFC. Co-Authored-By: Alberto Gonzalez <61295559+boqwxp@users.noreply.github.com> --- frontends/ilang/ilang_lexer.l | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frontends/ilang/ilang_lexer.l b/frontends/ilang/ilang_lexer.l index e36818e4f..62f53d18e 100644 --- a/frontends/ilang/ilang_lexer.l +++ b/frontends/ilang/ilang_lexer.l @@ -90,7 +90,7 @@ USING_YOSYS_NAMESPACE [0-9]+'[01xzm-]* { rtlil_frontend_ilang_yylval.string = strdup(yytext); return TOK_VALUE; } -?[0-9]+ { - char *end = NULL; + char *end = nullptr; long value = strtol(yytext, &end, 10); if (end != yytext + strlen(yytext)) return TOK_INVALID; // literal out of range of long @@ -146,4 +146,3 @@ USING_YOSYS_NAMESPACE void *rtlil_frontend_ilang_avoid_input_warnings() { return (void*)&yyinput; } -