aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcov.c
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2017-03-31 02:52:39 +0000
committerBernd Edlinger <edlinger@gcc.gnu.org>2017-03-31 02:52:39 +0000
commit62a767024c694e9ab52b142689180979213e9684 (patch)
treeb31ec054fa2376a4e5c386be9e406fc23869080b /gcc/gcov.c
parent0a55fbc0e5619feae5494d0ed1d4a1bf880c84f1 (diff)
downloadgcc-62a767024c694e9ab52b142689180979213e9684.zip
gcc-62a767024c694e9ab52b142689180979213e9684.tar.gz
gcc-62a767024c694e9ab52b142689180979213e9684.tar.bz2
gcov.c (md5sum_to_hex): Fix output of MD5 hex bytes.
2017-03-31 Bernd Edlinger <bernd.edlinger@hotmail.de> * gcov.c (md5sum_to_hex): Fix output of MD5 hex bytes. (make_gcov_file_name): Use the canonical path name for generating the MD5 value. (read_line): Fix handling of files with ascii null bytes. From-SVN: r246605
Diffstat (limited to 'gcc/gcov.c')
-rw-r--r--gcc/gcov.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/gcc/gcov.c b/gcc/gcov.c
index 4198dec..320b812 100644
--- a/gcc/gcov.c
+++ b/gcc/gcov.c
@@ -2167,7 +2167,7 @@ static void
md5sum_to_hex (const char *sum, char *buffer)
{
for (unsigned i = 0; i < 16; i++)
- sprintf (buffer + (2 * i), "%02x", sum[i]);
+ sprintf (buffer + (2 * i), "%02x", (unsigned char)sum[i]);
}
/* Generate an output file name. INPUT_NAME is the canonicalized main
@@ -2216,7 +2216,7 @@ make_gcov_file_name (const char *input_name, const char *src_name)
char md5sum_hex[33];
md5_init_ctx (&ctx);
- md5_process_bytes (result, strlen (result), &ctx);
+ md5_process_bytes (src_name, strlen (src_name), &ctx);
md5_finish_ctx (&ctx, md5sum);
md5sum_to_hex (md5sum, md5sum_hex);
free (result);
@@ -2512,14 +2512,20 @@ read_line (FILE *file)
{
size_t len = strlen (string + pos);
- if (string[pos + len - 1] == '\n')
+ if (len && string[pos + len - 1] == '\n')
{
string[pos + len - 1] = 0;
return string;
}
pos += len;
- string = XRESIZEVEC (char, string, string_len * 2);
- string_len *= 2;
+ /* If the file contains NUL characters or an incomplete
+ last line, which can happen more than once in one run,
+ we have to avoid doubling the STRING_LEN unnecessarily. */
+ if (pos > string_len / 2)
+ {
+ string_len *= 2;
+ string = XRESIZEVEC (char, string, string_len);
+ }
}
return pos ? string : NULL;