From 322bbed7c777296fede2473afed9a08716de0f1d Mon Sep 17 00:00:00 2001 From: Cary R Date: Fri, 21 Nov 2008 15:37:14 -0800 Subject: [PATCH] V0.8: Don't crash on invalid input. This patch mirrors what was done in development to prevent a crash when given invalid input. --- elaborate.cc | 4 ++-- net_nex_input.cc | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/elaborate.cc b/elaborate.cc index 1092ac906..9d59763af 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -1977,8 +1977,8 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope, if (synthesis) rem_out = true; NexusSet*nset = enet->nex_input(rem_out); if (nset == 0) { - cerr << get_line() << ": internal error: No NexusSet" - << " from statement." << endl; + cerr << get_line() << ": error: Unable to elaborate:" + << endl; enet->dump(cerr, 6); des->errors += 1; return enet; diff --git a/net_nex_input.cc b/net_nex_input.cc index 1f0d48e9c..0847f505a 100644 --- a/net_nex_input.cc +++ b/net_nex_input.cc @@ -65,9 +65,14 @@ NexusSet* NetEBitSel::nex_input(bool rem_out) NexusSet* NetEConcat::nex_input(bool rem_out) { + if (parms_[0] == NULL) return NULL; NexusSet*result = parms_[0]->nex_input(rem_out); for (unsigned idx = 1 ; idx < parms_.count() ; idx += 1) { NexusSet*tmp = parms_[idx]->nex_input(rem_out); + if (tmp == NULL) { + delete result; + return NULL; + } result->add(*tmp); delete tmp; } @@ -116,6 +121,10 @@ NexusSet* NetESelect::nex_input(bool rem_out) { NexusSet*result = base_? base_->nex_input(rem_out) : new NexusSet(); NexusSet*tmp = expr_->nex_input(rem_out); + if (tmp == NULL) { + delete result; + return NULL; + } result->add(*tmp); delete tmp; return result;