On 11/20/18 9:27 AM, Marc-André Lureau wrote:
Adding an assert is enough to silence GCC.

~/src/qemu/migration/global_state.c: In function 'global_state_store_running':
~/src/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));
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors

(alternatively, we could hard-code "running")

Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com>
---
  migration/global_state.c | 1 +
  1 file changed, 1 insertion(+)

Reviewed-by: Eric Blake <ebl...@redhat.com>

I think this is safe for 3.1, but I know the migration code is particularly wary of assert()s, even when they are non-triggerable (a 100-byte buffer at global_state.runstate is big enough for ALL of the run states, not just RUN_STATE_RUNNING).


diff --git a/migration/global_state.c b/migration/global_state.c
index 8e8ab5c51e..01805c567a 100644
--- a/migration/global_state.c
+++ b/migration/global_state.c
@@ -42,6 +42,7 @@ int global_state_store(void)
  void global_state_store_running(void)
  {
      const char *state = RunState_str(RUN_STATE_RUNNING);
+    assert(strlen(state) < sizeof(global_state.runstate));
      strncpy((char *)global_state.runstate,
             state, sizeof(global_state.runstate));
  }


--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

Reply via email to