From: Martin Liska Date: Thu, 24 Jan 2019 08:27:39 +0000 (+0100) Subject: Fix broken filename for .gcda files starting with '..' (PR gcov-profile/88994). X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=12502bf2e905cba16edf28941a37e6de432ea108;p=gcc.git Fix broken filename for .gcda files starting with '..' (PR gcov-profile/88994). 2019-01-24 Martin Liska PR gcov-profile/88994 * gcov-io.c (mangle_path): Do not allocate a bigger buffer, result will be always smaller or equal to the original. * gcov.c (mangle_name): Fix else branch where we should also copy to PTR and shift the pointer. From-SVN: r268233 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 56dbfa0ea3d..f7013b71ead 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2019-01-24 Martin Liska + + PR gcov-profile/88994 + * gcov-io.c (mangle_path): Do not allocate a bigger buffer, + result will be always smaller or equal to the original. + * gcov.c (mangle_name): Fix else branch where we should + also copy to PTR and shift the pointer. + 2019-01-24 Xiong Hu Luo * tree-ssa-dom.c (test_for_singularity): fix a comment typo. diff --git a/gcc/gcov-io.c b/gcc/gcov-io.c index e3b1c5ce7ae..1f8ac375931 100644 --- a/gcc/gcov-io.c +++ b/gcc/gcov-io.c @@ -547,7 +547,7 @@ mangle_path (char const *base) /* Convert '/' to '#', convert '..' to '^', convert ':' to '~' on DOS based file system. */ const char *probe; - char *buffer = (char *)xmalloc (strlen (base) + 10); + char *buffer = (char *)xmalloc (strlen (base) + 1); char *ptr = buffer; #if HAVE_DOS_BASED_FILE_SYSTEM diff --git a/gcc/gcov.c b/gcc/gcov.c index b8ce1ee0e09..cb6bc7ef85f 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -2520,6 +2520,9 @@ make_gcov_file_name (const char *input_name, const char *src_name) return result; } +/* Mangle BASE name, copy it at the beginning of PTR buffer and + return address of the \0 character of the buffer. */ + static char * mangle_name (char const *base, char *ptr) { @@ -2527,14 +2530,13 @@ mangle_name (char const *base, char *ptr) /* Generate the source filename part. */ if (!flag_preserve_paths) - { - base = lbasename (base); - len = strlen (base); - memcpy (ptr, base, len); - ptr += len; - } + base = lbasename (base); else - ptr = mangle_path (base); + base = mangle_path (base); + + len = strlen (base); + memcpy (ptr, base, len); + ptr += len; return ptr; }