ziqingluo-90 wrote:

> Btw a question about the new warning: So with 
> -Wunsafe-buffer-usage-in-libc-call clang now warns on the following?
> 
> ```
> #include <stdio.h>
> 
> void foo(void) {
>   char q[10];
>   snprintf(q, 10, "%s", "hello");
> }
> ```
> 
> It says
> 
> ```
> foo.c:5:3: warning: function 'snprintf' is unsafe 
> [-Wunsafe-buffer-usage-in-libc-call]
>     5 |   snprintf(q, 10, "%s", "hello");
>       |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> foo.c:5:12: note:  buffer pointer and size may not match
>     5 |   snprintf(q, 10, "%s", "hello");
>       |            ^
> 1 warning generated.
> ```
> 
> Is that as expected? If so, how should snprintf be used to avoid the warning?

Yes, this is expected.  According to the C++ Safe Buffers programming model, 
buffer pointers should be changed to `std::span`.   Then  
`snprintf(span.data(), span.size(), ...)` is considered safe and will not be 
warned.  We may also allow the use of the form `snprintf(span.first(10).data(), 
10, ...)` later.

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

Reply via email to