diff options
Diffstat (limited to 'utils/md5sum.c')
-rw-r--r-- | utils/md5sum.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/utils/md5sum.c b/utils/md5sum.c index dc55a98a7..f84634caf 100644 --- a/utils/md5sum.c +++ b/utils/md5sum.c @@ -223,6 +223,14 @@ get_md5_line(FILE *fp, unsigned char *digest, char *file) if (fgets(buf, sizeof(buf), fp) == NULL) return -1; + /* A line must have: a digest (32), a separator (2), and a + * filename (at least 1) + * + * That means it must be at least 35 characters long. + */ + if (strlen(buf) < 35) + return 0; + memcpy(digest, p, 32); p += 32; if (*p++ != ' ') @@ -246,7 +254,11 @@ get_md5_line(FILE *fp, unsigned char *digest, char *file) i = strlen(p); if (i < 2 || i > 255) return 0; - p[i-1] = '\0'; + + /* Strip the trailing newline, if present */ + if (p[i-1] == '\n') + p[i-1] = '\0'; + strcpy(file, p); return rc; } |