mailinfo: ignore blanks after in-body headers.
authorJunio C Hamano <junkio@cox.net>
Sat, 17 Jun 2006 23:58:51 +0000 (16:58 -0700)
committerJunio C Hamano <junkio@cox.net>
Sun, 18 Jun 2006 00:05:36 +0000 (17:05 -0700)
[jc: this is based on Eric's patch but also fixes up the parsed
 subject headers].

Signed-off-by: Junio C Hamano <junkio@cox.net>
mailinfo.c

index 0ccd490..d9b74f3 100644 (file)
@@ -243,11 +243,20 @@ static int eatspace(char *line)
 #define SEEN_BOGUS_UNIX_FROM 010
 #define SEEN_PREFIX  020
 
 #define SEEN_BOGUS_UNIX_FROM 010
 #define SEEN_PREFIX  020
 
-/* First lines of body can have From:, Date:, and Subject: */
+/* First lines of body can have From:, Date:, and Subject: or empty */
 static void handle_inbody_header(int *seen, char *line)
 {
        if (*seen & SEEN_PREFIX)
                return;
 static void handle_inbody_header(int *seen, char *line)
 {
        if (*seen & SEEN_PREFIX)
                return;
+       if (isspace(*line)) {
+               char *cp;
+               for (cp = line + 1; *cp; cp++) {
+                       if (!isspace(*cp))
+                               break;
+               }
+               if (!*cp)
+                       return;
+       }
        if (!memcmp(">From", line, 5) && isspace(line[5])) {
                if (!(*seen & SEEN_BOGUS_UNIX_FROM)) {
                        *seen |= SEEN_BOGUS_UNIX_FROM;
        if (!memcmp(">From", line, 5) && isspace(line[5])) {
                if (!(*seen & SEEN_BOGUS_UNIX_FROM)) {
                        *seen |= SEEN_BOGUS_UNIX_FROM;
@@ -316,6 +325,7 @@ static char *cleanup_subject(char *subject)
                        }       
                        break;
                }
                        }       
                        break;
                }
+               eatspace(subject);
                return subject;
        }
 }                      
                return subject;
        }
 }                      
@@ -422,9 +432,7 @@ static int read_one_header_line(char *line, int sz, FILE *in)
                if (fgets(line + ofs, sz - ofs, in) == NULL)
                        break;
                len = eatspace(line + ofs);
                if (fgets(line + ofs, sz - ofs, in) == NULL)
                        break;
                len = eatspace(line + ofs);
-               if (len == 0)
-                       break;
-               if (!is_rfc2822_header(line)) {
+               if ((len == 0) || !is_rfc2822_header(line)) {
                        /* Re-add the newline */
                        line[ofs + len] = '\n';
                        line[ofs + len + 1] = '\0';
                        /* Re-add the newline */
                        line[ofs + len] = '\n';
                        line[ofs + len + 1] = '\0';
@@ -764,10 +772,8 @@ static void handle_body(void)
 {
        int seen = 0;
 
 {
        int seen = 0;
 
-       if (line[0] || fgets(line, sizeof(line), stdin) != NULL) {
-               handle_commit_msg(&seen);
-               handle_patch();
-       }
+       handle_commit_msg(&seen);
+       handle_patch();
        fclose(patchfile);
        if (!patch_lines) {
                fprintf(stderr, "No patch found\n");
        fclose(patchfile);
        if (!patch_lines) {
                fprintf(stderr, "No patch found\n");