martong marked an inline comment as done.
martong added a comment.

In D87239#2259345 <https://reviews.llvm.org/D87239#2259345>, @steakhal wrote:

> I completely agree with you.
> I plan to further refactor the CStringChecker, but the related patches are 
> pretty much stuck :D
>
> I think this workaround is fine for now.
> You might as well extend the corresponding parts of the CStringChecker to 
> make the modelling more precise.
> It shouldn't be much of a hassle.
> What do you say about that?

I think the modeling is well done and precise. I mean, it seems like all of the 
constraints that I am removing here are handled in CStringChecker. It checks 
the pointer arguments whether they are null. Also, the length is checked in 
case of `strncasecmp`, here:

  if (IsBounded) {
    // Get the max number of characters to compare.
    const Expr *lenExpr = CE->getArg(2);
    SVal lenVal = state->getSVal(lenExpr, LCtx);
  
    // If the length is known, we can get the right substrings.
    if (const llvm::APSInt *len = svalBuilder.getKnownValue(state, lenVal)) {
      // Create substrings of each to compare the prefix.
      LeftStrRef = LeftStrRef.substr(0, (size_t)len->getZExtValue());
      RightStrRef = RightStrRef.substr(0, (size_t)len->getZExtValue());
      canComputeResult = true;
    }
  } else { .... }

So, the problem is rather that the constraint check should be done in 
checkPreCall, but that should be in an NFC refactoring.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D87239/new/

https://reviews.llvm.org/D87239

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to