summaryrefslogtreecommitdiff
path: root/utils/md5sum.c
diff options
context:
space:
mode:
Diffstat (limited to 'utils/md5sum.c')
-rw-r--r--utils/md5sum.c14
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;
}