On 05/09/2019 07:14, Jan Beulich wrote:
> Despite %.12s properly limiting the number of characters read from
> ident[], gcc 9 (at least up to 9.2.0) warns about the strings not
> being nul-terminated:
>
> test-cpu-policy.c:64:18: error: '%.12s' directive argument is not a 
> nul-terminated string [-Werror=format-overflow=]
>    64 |             fail("  Test '%.12s', expected vendor %u, got %u\n",
>       |                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> test-cpu-policy.c:20:12: note: in definition of macro 'fail'
>    20 |     printf(fmt, ##__VA_ARGS__);                 \
>       |            ^~~
> test-cpu-policy.c:64:27: note: format string is defined here
>    64 |             fail("  Test '%.12s', expected vendor %u, got %u\n",
>       |                           ^~~~~
> test-cpu-policy.c:44:7: note: referenced argument declared here
>    44 |     } tests[] = {
>       |       ^~~~~
>
> The issue was reported against gcc in their bugzilla (bug 91667).
>
> Re-order array entries, oddly enough suppressing the warning.
>
> Reported-by: Christopher Clark <christopher.w.cl...@gmail.com>

Reported-by: Dario Faggioli <dfaggi...@suse.com> as well.

> Signed-off-by: Jan Beulich <jbeul...@suse.com>

I see you managed to create a smaller synthetic example.  That is just
bizzare, but oh well.

Acked-by: Andrew Cooper <andrew.coop...@citrix.com>

>
> --- a/tools/tests/cpu-policy/test-cpu-policy.c
> +++ b/tools/tests/cpu-policy/test-cpu-policy.c
> @@ -42,15 +42,16 @@ static void test_vendor_identification(v
>          };
>          unsigned int vendor;
>      } tests[] = {
> +        /* The 1st entry should remain here to work around gcc bug 91667. */
> +        { { ""             }, X86_VENDOR_UNKNOWN },
> +        { { "            " }, X86_VENDOR_UNKNOWN },
> +        { { "xxxxxxxxxxxx" }, X86_VENDOR_UNKNOWN },
> +
>          { { "GenuineIntel" }, X86_VENDOR_INTEL },
>          { { "AuthenticAMD" }, X86_VENDOR_AMD },
>          { { "CentaurHauls" }, X86_VENDOR_CENTAUR },
>          { { "  Shanghai  " }, X86_VENDOR_SHANGHAI },
>          { { "HygonGenuine" }, X86_VENDOR_HYGON },
> -
> -        { { ""             }, X86_VENDOR_UNKNOWN },
> -        { { "            " }, X86_VENDOR_UNKNOWN },
> -        { { "xxxxxxxxxxxx" }, X86_VENDOR_UNKNOWN },
>      };
>  
>      printf("Testing CPU vendor identification:\n");


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

Reply via email to