From: Ken Brown <kbrown@cornell.edu>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 32189@debbugs.gnu.org
Subject: bug#32189: 27.0.50; GCC 7 warning due to -Wformat-truncation=2
Date: Wed, 18 Jul 2018 15:42:55 -0400 [thread overview]
Message-ID: <c8e5c36c-b96b-4df7-aff1-48ff23a84dc0@cornell.edu> (raw)
In-Reply-To: <83601c4m37.fsf@gnu.org>
On 7/18/2018 11:09 AM, Eli Zaretskii wrote:
>> From: Ken Brown <kbrown@cornell.edu>
>> Date: Tue, 17 Jul 2018 15:26:34 -0400
>>
>> I'm getting the following warning when building the master branch on
>> Cygwin with GCC 7.3:
>>
>> In file included from /usr/include/stdio.h:800:0,
>> from ../lib/stdio.h:43,
>> from ../../master/src/w32cygwinx.c:22:
>> ../../master/src/w32cygwinx.c: In function ‘Fw32_battery_status’:
>> ../../master/src/w32cygwinx.c:116:26: warning: ‘%3.1f’ directive output
>> may be truncated writing between 3 and 312 bytes into a region of size
>> 16 [-Wformat-truncation=]
>> snprintf (buffer, 16, "%3.1f", h);
>> ^
>> ../../master/src/w32cygwinx.c:116:4: note: ‘__builtin_snprintf’ output
>> between 4 and 313 bytes into a destination of size 16
>> snprintf (buffer, 16, "%3.1f", h);
>> ^
>
> Do we really need to use -Wformat-truncation? Is it a useful warning
> switch? The above sounds like useless noise, because the code
> explicitly _asks_ for truncation. What do people think about this?
Moreover, the warning isn't very smart; see below.
>> The attached patch avoids the warning. Is this a reasonable fix, or is
>> there a better way?
>
> I think if we keep the switch, a better fix is to do this:
>
> snprintf (buffer, 16, "%ld", h % 1000000);
>
> m = seconds_left / 60;
> snprintf (buffer, 16, "%ld", m % 20000);
>
> etc., you get the point.
This doesn't work with GCC 7. (Maybe it would work with GCC 8; the
release notes say that it is better at avoiding false positives.) For
integer specifiers like "%ld", the only thing I've found that works
without enlarging the buffer is to cast the argument to a smaller
integer type. For float specifiers like "%3.1f", even using a small
type doesn't seem to work. For example:
$ cat test.c
#include <stdio.h>
int
main ()
{
char buffer[16];
short a;
snprintf (buffer, 16, "%3.1f", a);
}
$ gcc -Wformat-truncation=2 test.c
test.c: In function ‘main’:
test.c:8:26: warning: ‘%3.1f’ directive output may be truncated writing
between 3 and 312 bytes into a region of size 16 [-Wformat-truncation=]
snprintf (buffer, 16, "%3.1f", a);
^~~~~
test.c:8:3: note: ‘snprintf’ output between 4 and 313 bytes into a
destination of size 16
snprintf (buffer, 16, "%3.1f", a);
^~~~~~~~~~~~~~~~~~~~~
Ken
next prev parent reply other threads:[~2018-07-18 19:42 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-17 19:26 bug#32189: 27.0.50; GCC 7 warning due to -Wformat-truncation=2 Ken Brown
2018-07-18 15:09 ` Eli Zaretskii
2018-07-18 19:42 ` Ken Brown [this message]
2018-07-19 2:38 ` Eli Zaretskii
2018-07-19 6:10 ` Philipp Stephani
2018-07-19 12:49 ` Ken Brown
2018-07-19 13:25 ` Eli Zaretskii
2018-07-19 6:21 ` Philipp Stephani
2018-07-19 13:29 ` Eli Zaretskii
2018-07-19 13:56 ` Ken Brown
2018-07-19 14:17 ` Eli Zaretskii
2018-07-19 23:19 ` Paul Eggert
2018-07-20 6:56 ` Eli Zaretskii
2018-07-20 13:49 ` Ken Brown
2018-07-20 14:17 ` Eli Zaretskii
2018-07-20 14:27 ` Ken Brown
2018-07-20 14:37 ` Paul Eggert
2018-07-20 14:51 ` Eli Zaretskii
2018-07-20 19:34 ` Ken Brown
2018-07-20 21:03 ` Paul Eggert
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c8e5c36c-b96b-4df7-aff1-48ff23a84dc0@cornell.edu \
--to=kbrown@cornell.edu \
--cc=32189@debbugs.gnu.org \
--cc=eliz@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).