Re: [igt-dev] [V2 i-g-t] tests/kms_cursor_crc: Fix SIGABRT in dynamic subtests

Modem, Bhanuprakash
2022-11-15T04:52:45Z

Hi Ashutosh,

On Tue-15-11-2022 01:38 am, Dixit, Ashutosh wrote:
> On Thu, 03 Nov 2022 19:00:05 -0700, Bhanuprakash Modem wrote:
>>
>
> Hi Bhanu, could you please fix the compile warnings below. Thanks.
>
>
>> @@ -700,65 +700,78 @@ static void test_rapid_movement(data_t *data)
>> igt_assert_lt(usec, 0.9 * 400 * 1000000 / data->refresh);
>> }
>>
>> -static void run_size_tests(data_t *data, void (*testfunc)(data_t *),
>> - int w, int h)
>> +static void run_size_tests(data_t *data, int w, int h)
>> {
>> enum pipe pipe;
>> + struct {
>> + const char *name;
>> + void (*testfunc)(data_t *);
>> + const char *desc;
>> + } size_tests[] = {
>> + { "cursor-onscreen", test_crc_onscreen,
>> + "Check if a given-size cursor is well-positioned inside the screen." },
>> + { "cursor-offscreen", test_crc_offscreen,
>> + "Check if a given-size cursor is well-positioned outside the screen." },
>> + { "cursor-sliding", test_crc_sliding,
>> + "Check the smooth and pixel-by-pixel given-size cursor movements on horizontal, vertical and diagonal." },
>> + { "cursor-random", test_crc_random,
>> + "Check random placement of a cursor with given size." },
>> + { "cursor-rapid-movement", test_rapid_movement,
>> + "Check the rapid update of given-size cursor movements." },
>> + };
>> + int i;
>> + char name[16];
>>
>> if (w == 0 && h == 0) {
>> w = data->cursor_max_w;
>> h = data->cursor_max_h;
>>
>> - /*
>> - * No point in doing the "max-size" test if
>> - * it was already covered by the other tests.
>> - */
>> - if ((w == h) && (w <= 512) && (h <= 512) &&
>> - is_power_of_two(w) && is_power_of_two(h)) {
>> - igt_info("Cursor max size %dx%d already covered by other tests\n", w, h);
>> - return;
>> - }
>> + strcpy(name, "max-size");
>> + } else {
>> + snprintf(name, sizeof(name), "%dx%d", w, h);
>
> [305/1132] Compiling C object tests/kms_cursor_crc.p/kms_cursor_crc.c.o
> ../tests/kms_cursor_crc.c: In function ‘run_size_tests.constprop’:
> ../tests/kms_cursor_crc.c:731:50: warning: ‘%d’ directive output may be truncated writing between 1 and 11 bytes into a region of size between 4 and 14 [-Wformat-truncation=]
> 731 | snprintf(name, sizeof(name), "%dx%d", w, h);
> | ^~
> ../tests/kms_cursor_crc.c:731:46: note: directive argument in the range [-2147483648, 1024]
> 731 | snprintf(name, sizeof(name), "%dx%d", w, h);
> | ^~~~~~~

Somehow this warning is not coming in local workspace, also not caught
in CI.
It seems, -Wformat-truncation flag is missing.

$ meson -Drunner=enabled build && ninja -C build && ninja -C build test

truncated...

Compiler for C supports arguments -Wbad-function-cast: YES
Compiler for C supports arguments -Wdeclaration-after-statement: YES
Compiler for C supports arguments -Wformat=2: YES
Compiler for C supports arguments -Wimplicit-fallthrough=0: YES
Compiler for C supports arguments -Wlogical-op: YES
Compiler for C supports arguments -Wmissing-declarations: YES
Compiler for C supports arguments -Wmissing-format-attribute: YES
Compiler for C supports arguments -Wmissing-noreturn: YES
Compiler for C supports arguments -Wmissing-prototypes: YES
Compiler for C supports arguments -Wnested-externs: YES
Compiler for C supports arguments -Wold-style-definition: YES
Compiler for C supports arguments -Wpointer-arith: YES
Compiler for C supports arguments -Wredundant-decls: YES
Compiler for C supports arguments -Wshadow: YES
Compiler for C supports arguments -Wstrict-prototypes: YES
Compiler for C supports arguments -Wuninitialized: YES
Compiler for C supports arguments -Wunused: YES
Compiler for C supports arguments -Wno-clobbered: YES
Compiler for C supports arguments -Wno-maybe-uninitialized: YES
Compiler for C supports arguments -Wno-missing-field-initializers: YES
Compiler for C supports arguments -Wno-pointer-arith: YES
Compiler for C supports arguments -Wno-address-of-packed-member: YES
Compiler for C supports arguments -Wno-sign-compare: YES
Compiler for C supports arguments -Wno-type-limits: YES
Compiler for C supports arguments -Wno-unused-parameter: YES
Compiler for C supports arguments -Wno-unused-result: YES
Compiler for C supports arguments -Werror=address: YES
Compiler for C supports arguments -Werror=array-bounds: YES
Compiler for C supports arguments -Werror=implicit: YES
Compiler for C supports arguments -Werror=init-self: YES
Compiler for C supports arguments -Werror=int-to-pointer-cast: YES
Compiler for C supports arguments -Werror=main: YES
Compiler for C supports arguments -Werror=missing-braces: YES
Compiler for C supports arguments -Werror=nonnull: YES
Compiler for C supports arguments -Werror=pointer-to-int-cast: YES
Compiler for C supports arguments -Werror=return-type: YES
Compiler for C supports arguments -Werror=sequence-point: YES
Compiler for C supports arguments -Werror=trigraphs: YES
Compiler for C supports arguments -Werror=write-strings: YES
Compiler for C supports arguments -fno-builtin-malloc: YES
Compiler for C supports arguments -fno-builtin-calloc: YES
Compiler for C supports arguments -fcommon: YES

truncated...

Compiler for C supports arguments -Wno-declaration-after-statement: YES
Compiler for C supports arguments -Wno-discarded-qualifiers: YES
Compiler for C supports arguments -Wno-missing-format-attribute: YES
Compiler for C supports arguments -Wno-old-style-definition: YES
Compiler for C supports arguments -Wno-redundant-decls: YES
Compiler for C supports arguments -Wno-shadow: YES
Compiler for C supports arguments
-Wno-incompatible-pointer-types-discards-qualifiers: NO

truncated...

Found ninja-1.10.0 at /usr/bin/ninja
ninja: Entering directory `build'
[1234/1234] Linking target tests/core_hotunplug
ninja: Entering directory `build'

truncated...

Ok: 332
Expected Fail: 4
Fail: 0
Unexpected Pass: 0
Skipped: 0
Timeout: 0

- Bhanu

> In file included from /usr/include/stdio.h:894,
> from ../lib/igt_core.h:41,
> from ../lib/drmtest.h:39,
> from ../lib/igt.h:27,
> from ../tests/kms_cursor_crc.c:25:
> In function ‘snprintf’,
> inlined from ‘run_size_tests.constprop’ at ../tests/kms_cursor_crc.c:731:3:
> /usr/include/bits/stdio2.h:71:10: note: ‘__builtin___snprintf_chk’ output between 4 and 24 bytes into a destination of size 16
> 71 | return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 72 | __glibc_objsize (__s), __fmt,
> | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 73 | __va_arg_pack ());
> | ~~~~~~~~~~~~~~~~~