From b49a86981c1e2d635f738dbddf285d03d2bce183 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sat, 3 Oct 2020 12:18:04 +0200 Subject: [PATCH] netlist: catch parenthesis count mismatch in formulas. --- src/lib/netlist/plib/pfunction.cpp | 2 ++ src/lib/netlist/tests/test_pfunction.cpp | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp index 0cf4fc4cdc2..d592a90d670 100644 --- a/src/lib/netlist/plib/pfunction.cpp +++ b/src/lib/netlist/plib/pfunction.cpp @@ -150,6 +150,8 @@ namespace plib { throw pexception(plib::pfmt("pfunction: stack underflow on token <{1}> in <{2}>")(cmd)(expr)); if (stk >= narrow_cast(MAX_STACK)) throw pexception(plib::pfmt("pfunction: stack overflow on token <{1}> in <{2}>")(cmd)(expr)); + if (rc.cmd() == LP || rc.cmd() == RP) + throw pexception(plib::pfmt("pfunction: parenthesis inequality on token <{1}> in <{2}>")(cmd)(expr)); m_precompiled.push_back(rc); } if (stk != 1) diff --git a/src/lib/netlist/tests/test_pfunction.cpp b/src/lib/netlist/tests/test_pfunction.cpp index 56923be8149..21dc33f28ac 100644 --- a/src/lib/netlist/tests/test_pfunction.cpp +++ b/src/lib/netlist/tests/test_pfunction.cpp @@ -50,6 +50,11 @@ PTEST(pfunction, unary_minus) PFUNCEXPECT("3*-trunc(3.2)", -9.0); PFUNCEXPECT("3*-(3*2)", -18.0); PFUNCEXPECT("3*-(2*1)^2", -12.0); - PEXPECT_THROW(plib::pfunction("(3, 4)")(), plib::pexception); - PEXPECT_NO_THROW(plib::pfunction("(3)")()); // fail + PEXPECT_NO_THROW(plib::pfunction("(-3)")()); // fail +} +PTEST(pfunction, expect_throw) +{ + PEXPECT_THROW(plib::pfunction("(3, 4)")(), plib::pexception); + PEXPECT_THROW(plib::pfunction("((3)")(), plib::pexception); + PEXPECT_THROW(plib::pfunction("(3))")(), plib::pexception); }