================
@@ -173,7 +222,80 @@ void UseStartsEndsWithCheck::registerMatchers(MatchFinder 
*Finder) {
       this);
 }
 
+void UseStartsEndsWithCheck::handleSubstrMatch(const MatchFinder::MatchResult 
&Result) {
+  const auto *SubstrCall = 
Result.Nodes.getNodeAs<CXXMemberCallExpr>("substr_fun");
+  const auto *PositiveComparison = 
Result.Nodes.getNodeAs<Expr>("positiveComparison");
+  const auto *NegativeComparison = 
Result.Nodes.getNodeAs<Expr>("negativeComparison");
+  
+  if (!SubstrCall || (!PositiveComparison && !NegativeComparison))
+    return;
+
+  bool Negated = NegativeComparison != nullptr;
+  const auto *Comparison = Negated ? NegativeComparison : PositiveComparison;
+  
+  if (SubstrCall->getBeginLoc().isMacroID())
+    return;
+
+  const auto *Str = Result.Nodes.getNodeAs<Expr>("str");
+  const auto *Literal = Result.Nodes.getNodeAs<StringLiteral>("literal");
+  const auto *Length = Result.Nodes.getNodeAs<Expr>("length");
+
+  if (!Str || !Literal || !Length)
+    return;
+
+  // Check if Length is an integer literal and compare with string length
+  if (const auto *LengthInt = dyn_cast<IntegerLiteral>(Length)) {
+    unsigned LitLength = Literal->getLength();
+    unsigned SubstrLength = LengthInt->getValue().getZExtValue();
----------------
EugeneZelenko wrote:

```suggestion
    const unsigned SubstrLength = LengthInt->getValue().getZExtValue();
```

https://github.com/llvm/llvm-project/pull/116033
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to