Browse Source

dd_term.cc: Add NULL checks for the return values of DD functions

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@10477 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Joachim Klein 11 years ago
parent
commit
90326ecfaf
  1. 33
      prism/src/dd/dd_term.cc

33
prism/src/dd/dd_term.cc

@ -30,6 +30,7 @@
#include "dd_basics.h"
#include "dd_term.h"
#include "dd_export.h"
#include "dd_cudd.h"
//------------------------------------------------------------------------------
@ -43,6 +44,7 @@ double threshold
DdNode *tmp, *tmp2;
tmp = Cudd_addBddThreshold(ddman, dd, threshold);
if (tmp == NULL) return NULL;
Cudd_Ref(tmp);
Cudd_RecursiveDeref(ddman, dd);
tmp2 = Cudd_BddToAdd(ddman, tmp);
@ -64,6 +66,7 @@ double threshold
DdNode *tmp, *tmp2;
tmp = Cudd_addBddStrictThreshold(ddman, dd, threshold);
if (tmp == NULL) return NULL;
Cudd_Ref(tmp);
Cudd_RecursiveDeref(ddman, dd);
tmp2 = Cudd_BddToAdd(ddman, tmp);
@ -106,7 +109,10 @@ DdNode *dd,
double threshold
)
{
return DD_Not(ddman, DD_Threshold(ddman, dd, threshold));
DdNode* res;
res = DD_Threshold(ddman, dd, threshold);
if (res == NULL) return NULL;
return DD_Not(ddman, res);
}
//------------------------------------------------------------------------------
@ -118,7 +124,10 @@ DdNode *dd,
double threshold
)
{
return DD_Not(ddman, DD_StrictThreshold(ddman, dd, threshold));
DdNode* res;
res = DD_StrictThreshold(ddman, dd, threshold);
if (res == NULL) return NULL;
return DD_Not(ddman, res);
}
//------------------------------------------------------------------------------
@ -146,9 +155,11 @@ double upper
DdNode *tmp, *tmp2;
tmp = Cudd_addBddInterval(ddman, dd, lower, upper);
if (tmp == NULL) return NULL;
Cudd_Ref(tmp);
Cudd_RecursiveDeref(ddman, dd);
tmp2 = Cudd_BddToAdd(ddman, tmp);
if (tmp2 == NULL) return NULL;
Cudd_Ref(tmp2);
Cudd_RecursiveDeref(ddman, tmp);
@ -167,6 +178,7 @@ int places
DdNode *res;
res = Cudd_addRoundOff(ddman, dd, places);
if (res == NULL) return NULL;
Cudd_Ref(res);
Cudd_RecursiveDeref(ddman, dd);
@ -213,7 +225,12 @@ DdManager *ddman,
DdNode *dd
)
{
return Cudd_V(Cudd_addFindMin(ddman, dd));
DdNode *v = Cudd_addFindMin(ddman, dd);
if (v == NULL) {
DD_SetErrorFlag();
return 0.0;
}
return Cudd_V(v);
}
//------------------------------------------------------------------------------
@ -224,7 +241,12 @@ DdManager *ddman,
DdNode *dd
)
{
return Cudd_V(Cudd_addFindMax(ddman, dd));
DdNode *v = Cudd_addFindMax(ddman, dd);
if (v == NULL) {
DD_SetErrorFlag();
return 0.0;
}
return Cudd_V(v);
}
//------------------------------------------------------------------------------
@ -243,16 +265,19 @@ int num_vars
// construct filter to get first non-zero element
ptr = dd;
filter = DD_Constant(ddman, 1);
if (filter == NULL) return NULL;
for (i = 0; i < num_vars; i++) {
next_ptr = (ptr->index > vars[i]->index) ? ptr : Cudd_E(ptr);
if (next_ptr != Cudd_ReadZero(ddman)) {
Cudd_Ref(vars[i]);
filter = DD_And(ddman, filter, DD_Not(ddman, vars[i]));
if (filter == NULL) return NULL;
}
else {
next_ptr = (ptr->index > vars[i]->index) ? ptr : Cudd_T(ptr);
Cudd_Ref(vars[i]);
filter = DD_And(ddman, filter, vars[i]);
if (filter == NULL) return NULL;
}
ptr = next_ptr;
}

Loading…
Cancel
Save