From bc361329ac2d23363e85c8def0070845c3140edf Mon Sep 17 00:00:00 2001 From: bynect <68197565+bynect@users.noreply.github.com> Date: Sat, 20 Apr 2024 01:05:28 +0200 Subject: [PATCH] Fix uninitialized use of PangoContext in tests --- Makefile | 1 + test/draw.c | 27 +++++++++++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 90d97fa5f..e92657eb5 100644 --- a/Makefile +++ b/Makefile @@ -89,6 +89,7 @@ test: test/test clean-coverage-run test-valgrind: test/test ${VALGRIND} \ --suppressions=.valgrind.suppressions \ + --track-origins=yes \ --leak-check=full \ --show-leak-kinds=definite \ --errors-for-leak-kinds=definite \ diff --git a/test/draw.c b/test/draw.c index b1014bef8..274ff406d 100644 --- a/test/draw.c +++ b/test/draw.c @@ -14,7 +14,7 @@ cairo_t *c; double get_dummy_scale(void) { return 1; } const struct screen_info* noop_screen(void) { - static struct screen_info i; + static struct screen_info i = {0}; return &i; } @@ -267,15 +267,18 @@ TEST test_layout_render_no_gaps(void) dim = calculate_dimensions(layouts); image_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); - enum corner_pos corners = C_TOP | _C_FIRST; + enum corner_pos corners = (settings.corners & C_TOP) | _C_FIRST; for (GSList *iter = layouts; iter; iter = iter->next) { + struct colored_layout *cl_this = iter->data; struct colored_layout *cl_next = iter->next ? iter->next->data : NULL; - if (!cl_next) - corners |= C_BOT | _C_LAST; - dim = layout_render(image_surface, cl_this, cl_next, dim, corners); + if (settings.gap_size) + corners = settings.corners; + else if (!cl_next) + corners |= (settings.corners & C_BOT) | _C_LAST; + dim = layout_render(image_surface, cl_this, cl_next, dim, corners); corners &= ~(C_TOP | _C_FIRST); } @@ -311,11 +314,19 @@ TEST test_layout_render_gaps(void) dim = calculate_dimensions(layouts); image_surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); + enum corner_pos corners = (settings.corners & C_TOP) | _C_FIRST; for (GSList *iter = layouts; iter; iter = iter->next) { + struct colored_layout *cl_this = iter->data; struct colored_layout *cl_next = iter->next ? iter->next->data : NULL; - dim = layout_render(image_surface, cl_this, cl_next, dim, C_ALL); + if (settings.gap_size) + corners = settings.corners; + else if (!cl_next) + corners |= (settings.corners & C_BOT) | _C_LAST; + + dim = layout_render(image_surface, cl_this, cl_next, dim, corners); + corners &= ~(C_TOP | _C_FIRST); } expected_y = get_expected_dimension_y_offset(layout_count); @@ -336,6 +347,10 @@ SUITE(suite_draw) cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); c = cairo_create(s); + // XXX: This variable should not be accessed like this + extern PangoContext *pango_ctx; + pango_ctx = pango_cairo_create_context(c); + SHUFFLE_TESTS(time(NULL), { RUN_TEST(test_layout_from_notification); RUN_TEST(test_layout_from_notification_icon_off);