From 97f1aae9d65e2357d61bdc05e331062f50e2e751 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Wed, 20 Mar 2019 13:48:57 +0200 Subject: tests/testdisplay: fix heap overflow v2: also simplify the code by using dirname(3). v3: dirname may modify in-place its argument, duplicate the string Signed-off-by: Simon Ser Reviewed-by: Chris Wilson --- tests/testdisplay.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'tests/testdisplay.c') diff --git a/tests/testdisplay.c b/tests/testdisplay.c index b3657264..67d1b68a 100644 --- a/tests/testdisplay.c +++ b/tests/testdisplay.c @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -563,24 +564,17 @@ static gboolean input_event(GIOChannel *source, GIOCondition condition, return TRUE; } -static void enter_exec_path( char **argv ) +static void enter_exec_path(const char **argv) { - char *exec_path = NULL; - char *pos = NULL; - short len_path = 0; + char *argv0, *exec_path; int ret; - len_path = strlen( argv[0] ); - exec_path = (char*) malloc(len_path); - - memcpy(exec_path, argv[0], len_path); - pos = strrchr(exec_path, '/'); - if (pos != NULL) - *(pos+1) = '\0'; - + argv0 = strdup(argv[0]); + igt_assert(argv0); + exec_path = dirname(argv0); ret = chdir(exec_path); igt_assert_eq(ret, 0); - free(exec_path); + free(argv0); } static void restore_termio_mode(int sig) @@ -626,7 +620,7 @@ int main(int argc, char **argv) igt_skip_on_simulation(); - enter_exec_path( argv ); + enter_exec_path((const char **) argv); while ((c = getopt_long(argc, argv, optstr, long_opts, NULL)) != -1) { switch (c) { -- cgit v1.2.3