[cfe-dev] RFC: default to -Werror=format-security
Craig, Ben via cfe-dev
cfe-dev at lists.llvm.org
Wed Feb 17 13:10:05 PST 2016
On 2/17/2016 3:03 PM, Sean Silva via cfe-dev wrote:
> On Wed, Feb 17, 2016 at 5:27 AM, Aaron Ballman via cfe-dev
> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>
> On Wed, Feb 17, 2016 at 3:48 AM, David Chisnall
> <David.Chisnall at cl.cam.ac.uk <mailto:David.Chisnall at cl.cam.ac.uk>>
> wrote:
> > On 16 Feb 2016, at 21:56, Aaron Ballman via cfe-dev
> <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
> >>
> >> Sorry, but printf(fmt); is *always* a true positive in my book.
> Same
> >> with failing to return from all code paths. (etc)
> >
> > You are wrong. The most common reason for printf(fmt) to appear
> is that fmt is the result of doing a lookup of the locale-aware
> version of some constant string. In this case, the contents of
> fmt is entirely under the control of whoever shipped the
> application, and will have been checked for format string
> vulnerabilities by the localisation tools (at least, assuming that
> the original that is being translated are free from
> vulnerabilities). If you are not doing any caching in the
> application, then you can mark the translation function with the
> attribute that indicates that its input and output have the same
> format string compatibility. If you are caching, then there is no
> easy way of silencing this warning.
> >
> > Making this an error will cause valid and correct code to fail
> to compile and will result in people simply disabling the warning,
> rather than checking it.
>
> If the expected string does not have any format specifiers, then
> printf("%s", fmt) is definitely the correct way to write that because
> the assumption "entirely under the control of whoever shipped the
> application" is a poor one. If it does have format specifiers, I agree
> that we should not err, but I don't believe that was on the table.
>
>
> I think David is talking about a situation where it is e.g.
>
> printf(translate("Please enter a number from %d-%d\n"), lo, hi);
>
Note from the original post:
"This warning complains about a printf-like format string that is
not a literal string and is used without any arguments."
That means that 'printf(translate("Please press OK to continue"));'
would trigger this warning (rightfully). But the example you gave would
not trigger the warning, as the invocation has extra 'lo' and 'hi'
arguments.
> -- Sean Silva
>
>
> ~Aaron
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160217/abe3d91b/attachment.html>
More information about the cfe-dev
mailing list