Fix a null pointer dereference error due to state caching in a loop involving

sending a message to a nil receiver.

llvm-svn: 68686
This commit is contained in:
Ted Kremenek 2009-04-09 06:02:06 +00:00
parent cb5d3ced70
commit 2f3b0dbff4
1 changed files with 6 additions and 7 deletions

View File

@ -1704,10 +1704,8 @@ void GRExprEngine::VisitObjCMessageExprDispatchHelper(ObjCMessageExpr* ME,
N->markAsSink();
if (isFeasibleNotNull)
NilReceiverStructRetImplicit.insert(N);
else {
else
NilReceiverStructRetExplicit.insert(N);
return;
}
}
}
}
@ -1725,10 +1723,8 @@ void GRExprEngine::VisitObjCMessageExprDispatchHelper(ObjCMessageExpr* ME,
N->markAsSink();
if(isFeasibleNotNull)
NilReceiverLargerThanVoidPtrRetImplicit.insert(N);
else {
else
NilReceiverLargerThanVoidPtrRetExplicit.insert(N);
return;
}
}
}
else if (!isFeasibleNotNull) {
@ -1754,6 +1750,9 @@ void GRExprEngine::VisitObjCMessageExprDispatchHelper(ObjCMessageExpr* ME,
}
// We have handled the cases where the receiver is nil. The remainder
// of this method should assume that the receiver is not nil.
if (!StNotNull)
return;
state = StNotNull;
}