* Philippe Mathieu-Daudé (phi...@redhat.com) wrote: > GCC 8 added a -Wstringop-truncation warning: > > The -Wstringop-truncation warning added in GCC 8.0 via r254630 for > bug 81117 is specifically intended to highlight likely unintended > uses of the strncpy function that truncate the terminating NUL > character from the source string. > > This new warning leads to compilation failures: > > CC migration/global_state.o > qemu/migration/global_state.c: In function 'global_state_store_running': > qemu/migration/global_state.c:45:5: error: 'strncpy' specified bound 100 > equals destination size [-Werror=stringop-truncation] > strncpy((char *)global_state.runstate, state, > sizeof(global_state.runstate)); > > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > make: *** [qemu/rules.mak:69: migration/global_state.o] Error 1 > > Use the QEMU_NONSTRING attribute, since this array is intended to store > character arrays that do not necessarily contain a terminating NUL. > > Suggested-by: Michael S. Tsirkin <m...@redhat.com> > Signed-off-by: Philippe Mathieu-Daudé <phi...@redhat.com> > --- > migration/global_state.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/migration/global_state.c b/migration/global_state.c > index 8e8ab5c51e..6e19333422 100644 > --- a/migration/global_state.c > +++ b/migration/global_state.c > @@ -21,7 +21,7 @@ > > typedef struct { > uint32_t size; > - uint8_t runstate[100]; > + uint8_t runstate[100] QEMU_NONSTRING;
Hmm; global_state_post_load needs to be fixed for this; it uses s->runsate and ends up passing it to both a trace and a qapi_enum_parse - so it's really treating it as a string. That code is unsafe anyway since it's assuming the received runstate would be terminated. Dave > RunState state; > bool received; > } GlobalState; > -- > 2.17.2 > -- Dr. David Alan Gilbert / dgilb...@redhat.com / Manchester, UK