tests/desktop-app-info: fix stack-use-after-scope

Fix the tests, by allocating the structure.

==121338==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7ffe44018610 at pc 0x00000040ff71 bp 0x7ffe440178f0 sp 0x7ffe440178e8
READ of size 8 at 0x7ffe44018610 thread T0
    #0 0x40ff70 in test_launch_uris_with_terminal ../gio/tests/desktop-app-info.c:1393
    #1 0x7efd97b831e8 in test_case_run ../glib/gtestutils.c:2947
    #2 0x7efd97b831e8 in g_test_run_suite_internal ../glib/gtestutils.c:3037
    #3 0x7efd97b82d23 in g_test_run_suite_internal ../glib/gtestutils.c:3056
    #4 0x7efd97b82d23 in g_test_run_suite_internal ../glib/gtestutils.c:3056
    #5 0x7efd97b82d23 in g_test_run_suite_internal ../glib/gtestutils.c:3056
    #6 0x7efd97b84189 in g_test_run_suite ../glib/gtestutils.c:3136
    #7 0x7efd97b842c5 in g_test_run ../glib/gtestutils.c:2248
    #8 0x4055bc in main ../gio/tests/desktop-app-info.c:1901
    #9 0x7efd9564a50f in __libc_start_call_main (/lib64/libc.so.6+0x2750f)
    #10 0x7efd9564a5c8 in __libc_start_main_alias_1 (/lib64/libc.so.6+0x275c8)
    #11 0x4059f4 in _start (/home/elmarco/src/gnome/glib/build/gio/tests/desktop-app-info+0x4059f4)

Address 0x7ffe44018610 is located in stack of thread T0 at offset 128 in frame
    #0 0x404d1f in main ../gio/tests/desktop-app-info.c:1823

  This frame has 6 object(s):
    [48, 52) 'argc' (line 1821)
    [64, 72) 'path' (line 1870)
    [96, 104) 'argv' (line 1822)
    [128, 144) '<unknown>' <== Memory access at offset 128 is inside this variable
    [160, 176) '<unknown>'
    [192, 288) 'supported_terminals' (line 1825)

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit is contained in:
Marc-André Lureau 2023-01-24 23:38:21 +04:00
parent 20c4fcb2a7
commit f50a4f8501

View File

@ -1382,6 +1382,18 @@ typedef struct {
TerminalLaunchType type;
} TerminalLaunchData;
static TerminalLaunchData *
terminal_launch_data_new (const char *exec, TerminalLaunchType type)
{
TerminalLaunchData *d = NULL;
d = g_new0 (TerminalLaunchData, 1);
d->exec = exec;
d->type = type;
return d;
}
static void
test_launch_uris_with_terminal (gconstpointer data)
{
@ -1849,27 +1861,26 @@ main (int argc,
path = g_strdup_printf ("/desktop-app-info/launch-uris-with-terminal/with-path/%s",
supported_terminals[i]);
g_test_add_data_func (path, &(TerminalLaunchData) {
.exec = supported_terminals[i],
.type = TERMINAL_LAUNCH_TYPE_COMMAND_LINE_WITH_PATH_OVERRIDE,
}, test_launch_uris_with_terminal);
g_free (path);
g_test_add_data_func_full (path,
terminal_launch_data_new (supported_terminals[i],
TERMINAL_LAUNCH_TYPE_COMMAND_LINE_WITH_PATH_OVERRIDE),
test_launch_uris_with_terminal, g_free);
g_clear_pointer (&path, g_free);
path = g_strdup_printf ("/desktop-app-info/launch-uris-with-terminal/with-context/%s",
supported_terminals[i]);
g_test_add_data_func (path, &(TerminalLaunchData) {
.exec = supported_terminals[i],
.type = TERMINAL_LAUNCH_TYPE_COMMAND_LINE_WITH_CONTEXT,
}, test_launch_uris_with_terminal);
g_test_add_data_func_full (path,
terminal_launch_data_new (supported_terminals[i],
TERMINAL_LAUNCH_TYPE_COMMAND_LINE_WITH_CONTEXT),
test_launch_uris_with_terminal, g_free);
g_clear_pointer (&path, g_free);
path = g_strdup_printf ("/desktop-app-info/launch-uris-with-terminal/with-desktop-path/%s",
supported_terminals[i]);
g_test_add_data_func (path, &(TerminalLaunchData) {
.exec = supported_terminals[i],
.type = TERMINAL_LAUNCH_TYPE_KEY_FILE_WITH_PATH,
}, test_launch_uris_with_terminal);
g_test_add_data_func_full (path,
terminal_launch_data_new (supported_terminals[i],
TERMINAL_LAUNCH_TYPE_KEY_FILE_WITH_PATH),
test_launch_uris_with_terminal, g_free);
g_clear_pointer (&path, g_free);
}