================
@@ -891,7 +891,9 @@ AST_MATCHER(CallExpr, hasUnsafeSnprintfBuffer) {
 
   // Pattern 1:
   static StringRef SizedObjs[] = {"span", "array", "vector",
-                                  "basic_string_view", "basic_string"};
+                                  "basic_string_view", "basic_string",
+                                   // Support absl::Span and absl::string_view
+                                  "Span", "string_view" };
----------------
ilya-biryukov wrote:

I am afraid this will not work because of the following check on line 920:

```
          if (MCEPtr->getRecordDecl()->isInStdNamespace() &&
              MCEPtr->getRecordDecl()->getCanonicalDecl()->getName() ==
                  SizedObj)
```

You want to change this to take namespace into account somehow. I suggest 
creating a method `IsInNamedNamespace` that accepts the namespace name and 
passes it all the way down to this function that current passes a string 
constant `"std"`. 

https://github.com/llvm/llvm-project/blob/3dc159431be7a8c5f1a26a8bd57794f1c7008969/clang/lib/AST/DeclBase.cpp#L1344


That way the `IsInStdNamespace` will be implemented as `return 
IsInNamedNamespace("std")`

PS a more sophisticated version would allow to follow multiple nested 
namespaces is probably also useful, but I'd not bother with it for now.


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

Reply via email to