diff options
author | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2017-03-31 02:52:39 +0000 |
---|---|---|
committer | Bernd Edlinger <edlinger@gcc.gnu.org> | 2017-03-31 02:52:39 +0000 |
commit | 62a767024c694e9ab52b142689180979213e9684 (patch) | |
tree | b31ec054fa2376a4e5c386be9e406fc23869080b /gcc/gcov.c | |
parent | 0a55fbc0e5619feae5494d0ed1d4a1bf880c84f1 (diff) | |
download | gcc-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.c | 16 |
1 files changed, 11 insertions, 5 deletions
@@ -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; |