qemu with hax to log dma reads & writes jcs.org/2018/11/12/vfio

qdist: return "(empty)" instead of NULL when printing an empty dist

Printf'ing a NULL string is undefined behaviour. Avoid it.

Reported-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Emilio G. Cota <cota@braap.org>
Message-Id: <1469459025-23606-4-git-send-email-cota@braap.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

authored by

Emilio G. Cota and committed by
Paolo Bonzini
11b7b07f 071d4054

+12 -4
+8 -2
tests/test-qdist.c
··· 360 360 g_assert(isnan(qdist_xmax(&dist))); 361 361 362 362 pr = qdist_pr_plain(&dist, 0); 363 - g_assert(pr == NULL); 363 + g_assert_cmpstr(pr, ==, "(empty)"); 364 + g_free(pr); 364 365 365 366 pr = qdist_pr_plain(&dist, 2); 366 - g_assert(pr == NULL); 367 + g_assert_cmpstr(pr, ==, "(empty)"); 368 + g_free(pr); 369 + 370 + pr = qdist_pr(&dist, 0, QDIST_PR_BORDER); 371 + g_assert_cmpstr(pr, ==, "(empty)"); 372 + g_free(pr); 367 373 368 374 qdist_destroy(&dist); 369 375 }
+4 -2
util/qdist.c
··· 14 14 #define NAN (0.0 / 0.0) 15 15 #endif 16 16 17 + #define QDIST_EMPTY_STR "(empty)" 18 + 17 19 void qdist_init(struct qdist *dist) 18 20 { 19 21 dist->entries = g_new(struct qdist_entry, 1); ··· 233 235 char *ret; 234 236 235 237 if (dist->n == 0) { 236 - return NULL; 238 + return g_strdup(QDIST_EMPTY_STR); 237 239 } 238 240 qdist_bin__internal(&binned, dist, n); 239 241 ret = qdist_pr_internal(&binned); ··· 308 310 GString *s; 309 311 310 312 if (dist->n == 0) { 311 - return NULL; 313 + return g_strdup(QDIST_EMPTY_STR); 312 314 } 313 315 314 316 s = g_string_new("");