From b604c97b33de1785a10b2df2b3eaa48f2bee0719 Mon Sep 17 00:00:00 2001 From: Archie Date: Tue, 14 Jun 2022 14:17:00 +0100 Subject: [PATCH 1/5] Add check for BLIF with no model name --- frontends/blif/blifparse.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontends/blif/blifparse.cc b/frontends/blif/blifparse.cc index 19844bda6..73d1f0ea7 100644 --- a/frontends/blif/blifparse.cc +++ b/frontends/blif/blifparse.cc @@ -166,7 +166,10 @@ void parse_blif(RTLIL::Design *design, std::istream &f, IdString dff_name, bool goto error; module = new RTLIL::Module; lastcell = nullptr; - module->name = RTLIL::escape_id(strtok(NULL, " \t\r\n")); + char *name = strtok(NULL, " \t\r\n"); + if (name == nullptr) + goto error; + module->name = RTLIL::escape_id(name); obj_attributes = &module->attributes; obj_parameters = nullptr; if (design->module(module->name)) From 4542d517913999754827472f1f0b6a5520fcc9e6 Mon Sep 17 00:00:00 2001 From: Archie Date: Fri, 17 Jun 2022 20:07:02 +0100 Subject: [PATCH 2/5] Adding testcase for issue 3374 --- tests/blif/bug3374.ys | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 tests/blif/bug3374.ys diff --git a/tests/blif/bug3374.ys b/tests/blif/bug3374.ys new file mode 100644 index 000000000..d7d8c765b --- /dev/null +++ b/tests/blif/bug3374.ys @@ -0,0 +1,3 @@ +read_blif < Date: Mon, 20 Jun 2022 21:50:26 +0100 Subject: [PATCH 3/5] Adding expected error message. --- tests/blif/bug3374.ys | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/blif/bug3374.ys b/tests/blif/bug3374.ys index d7d8c765b..792d4de20 100644 --- a/tests/blif/bug3374.ys +++ b/tests/blif/bug3374.ys @@ -1,3 +1,4 @@ +logger -expect error "Syntax error in line 1!" 1 read_blif < Date: Sun, 21 Aug 2022 23:18:20 -0500 Subject: [PATCH 4/5] Adding check for BLIF names command input plane size. --- frontends/blif/blifparse.cc | 9 ++++++++- tests/blif/bug3385.ys | 9 +++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/blif/bug3385.ys diff --git a/frontends/blif/blifparse.cc b/frontends/blif/blifparse.cc index 73d1f0ea7..52742660e 100644 --- a/frontends/blif/blifparse.cc +++ b/frontends/blif/blifparse.cc @@ -21,6 +21,8 @@ YOSYS_NAMESPACE_BEGIN +const int lut_input_plane_limit = 12; + static bool read_next_line(char *&buffer, size_t &buffer_size, int &line_count, std::istream &f) { string strbuf; @@ -513,6 +515,11 @@ void parse_blif(RTLIL::Design *design, std::istream &f, IdString dff_name, bool sopmode = -1; lastcell = sopcell; } + else if (input_sig.size() > lut_input_plane_limit) + { + err_reason = stringf("names' input plane must have fewer than 13 signals."); + goto error_with_reason; + } else { RTLIL::Cell *cell = module->addCell(NEW_ID, ID($lut)); @@ -576,7 +583,7 @@ void parse_blif(RTLIL::Design *design, std::istream &f, IdString dff_name, bool if (lutptr) { - if (input_len > 12) + if (input_len > lut_input_plane_limit) goto error; for (int i = 0; i < (1 << input_len); i++) { diff --git a/tests/blif/bug3385.ys b/tests/blif/bug3385.ys new file mode 100644 index 000000000..e1e45983d --- /dev/null +++ b/tests/blif/bug3385.ys @@ -0,0 +1,9 @@ +logger -expect error "Syntax error in line 4: names' input plane must have fewer than 13 signals." 1 +read_blif < Date: Sun, 2 Oct 2022 21:59:46 +0200 Subject: [PATCH 5/5] Changing error reason string to be based on lut input plane limit constant. --- frontends/blif/blifparse.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontends/blif/blifparse.cc b/frontends/blif/blifparse.cc index 52742660e..fe4c9078a 100644 --- a/frontends/blif/blifparse.cc +++ b/frontends/blif/blifparse.cc @@ -517,7 +517,7 @@ void parse_blif(RTLIL::Design *design, std::istream &f, IdString dff_name, bool } else if (input_sig.size() > lut_input_plane_limit) { - err_reason = stringf("names' input plane must have fewer than 13 signals."); + err_reason = stringf("names' input plane must have fewer than %d signals.", lut_input_plane_limit + 1); goto error_with_reason; } else