https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87383

            Bug ID: 87383
           Summary: improve text and detail in -Wstringop-truncation
                    warnings
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

I got the following feedback from a Linux kernel developer on/suggestions for
improvements in -Wstringop-truncation:

> Example 1: this warns. According to the documentation, because
> strlen(src) could be >= strlen(dst) and therefore dst not
> NUL-terminated. However, the warning message could be improved to
> reflect that (if that is truly the reason we have this warning).
> 
> extern char dst[12];
> extern char *src;
> void f(void) {
>     // warning: 'strncpy' specified bound 12 equals destination size
> [-Wstringop-truncation]
>     strncpy(dst, src, sizeof(dst));
> }
>
> Example 2: this does warn. It seems it is the same case as example 1,
> but now you know the actual (array) size of src so you can give more
> details. Still, I think in example 1 we should put the same
> explanation as here: i.e. something like "if len(src) >= 12, then dst
> might truncated", no? (assuming I am understanding why you warn on
> Example 1).
> 
> extern char dst[12];
> extern char src[13];
> void f(void) {
> // warning: 'strncpy' output may be truncated copying 12 bytes from a
> string of length 12 [-Wstringop-truncation]
> strncpy(dst, src, sizeof(dst));
> }

My response was:

I'm not sure off the top of my head what more to say but let me see if I can
come up with better/clearer wording, maybe in a note.

In Example 2, we warn for the same reason as in Example 1 where we know
the size of the source array.  In Example 2 we don't, but we could certainly
reword the warning along similar lines.  Let me think about that also.

Reply via email to