X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/a8d183948d18b1fba94a305072bfd3c15f93da03..5ed8cd671b27e1388c0c7e881805775a8e5b353a:/uip/mhparse.c diff --git a/uip/mhparse.c b/uip/mhparse.c index 69660a91..bab4e5b6 100644 --- a/uip/mhparse.c +++ b/uip/mhparse.c @@ -334,12 +334,25 @@ get_content (FILE *in, char *file, int toplevel) continue; case BODY: + /* There are two cases. The unusual one is when there is no + * blank line between the headers and the body. This is + * indicated by the name of the header starting with `:'. + * + * For both cases, normal first, `1' is the desired c_begin + * file position for the start of the body, and `2' is the + * file position when buf is returned. + * + * f o o : b a r \n \n b o d y \n bufsz = 6 + * 1 2 move -5 + * f o o : b a r \n b o d y \n bufsz = 4 + * 1 2 move -4 + * + * For the normal case, bufsz includes the + * header-terminating `\n', even though it is not in buf, + * but bufsz isn't affected when it's missing in the unusual + * case. */ if (name[0] == ':') { - /* Special case: no blank line between header and body. The - file position indicator is on the newline at the end of the - line, but it needs to be one prior to the beginning of the - line. So subtract the length of the line, bufsz, plus 1. */ - ct->c_begin = ftell (in) - (bufsz + 1); + ct->c_begin = ftell(in) - bufsz; } else { ct->c_begin = ftell (in) - (bufsz - 1); } @@ -1841,7 +1854,7 @@ openBase64 (CT ct, char **file) if (ct->c_digested) { if (memcmp(digest, ct->c_digest, - sizeof(digest) / sizeof(digest[0]))) { + sizeof digest)) { content_error (NULL, ct, "content integrity suspect (digest mismatch) -- continuing"); } else { @@ -2093,7 +2106,7 @@ openQuoted (CT ct, char **file) MD5Final (digest, &mdContext); if (memcmp((char *) digest, (char *) ct->c_digest, - sizeof(digest) / sizeof(digest[0]))) + sizeof digest)) content_error (NULL, ct, "content integrity suspect (digest mismatch) -- continuing"); else @@ -2898,7 +2911,7 @@ readDigest (CT ct, char *cp) size_t len; if (decodeBase64 (cp, &digest, &len, 0, NULL) == OK) { - const size_t maxlen = sizeof ct->c_digest / sizeof ct->c_digest[0]; + const size_t maxlen = sizeof ct->c_digest; if (strlen ((char *) digest) <= maxlen) { memcpy (ct->c_digest, digest, maxlen);