On Tue, Jul 01, 2025 at 08:41:46AM -0700, Stephen Hemminger wrote:
> When compiled with Link Time Optimization, the existing code
> generated an error, because the compiler was unable to intuit
> that there was space in the flexible array.
>
> In function ‘test_argparse_copy’,
> inlined from ‘test_argparse_init_obj’ at
> ../app/test/test_argparse.c:108:2,
> inlined from ‘test_argparse_opt_callback_parse_int_of_no_val’ at
> ../app/test/test_argparse.c:490:8:
> ../app/test/test_argparse.c:96:17: warning: ‘memcpy’ writing 56 bytes into a
> region of size 0 overflows the destination [-Wstringop-overflow=]
> 96 | memcpy(&dst->args[i], &src->args[i],
> sizeof(src->args[i]));
>
> Initializing a structure with flexible array is special case
> and compiler expands the structure to fit. But inside the copy
> function it no longer knew that.
>
> The workaround is to put the copy inside the same function
> and use structure assignment. Also macro should be upper case.
>
> Fixes: 6c5c6571601c ("argparse: verify argument config")
> Cc: fengcheng...@huawei.com
>
> Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
Acked-by: Bruce Richardson <bruce.richard...@intel.com>