int write_custom_line(int sockfd, const char *line);
int write_mailbody_from_map(int sockfd, char *mailmap, size_t mailsize,
const char *tohdr);
-char *get_preppedhdrs_from_map(char *mapstart, size_t *hdrslen);
+char *get_preppedhdrs_from_map(char *mapstart, size_t maplen, size_t *hdrslen);
char *get_prepped_mailbody_from_map(char *mapstart, size_t size,
size_t *bodylen);
int write_replyto(int sockfd, const char *replyaddr);
return 0;
}
-char *get_preppedhdrs_from_map(char *mapstart, size_t *hlen)
+char *get_preppedhdrs_from_map(char *mapstart, size_t maplen, size_t *hlen)
{
char *cur, *next, *endhdrs, *retstr, *r;
const char newlinebuf[] = "\r\n";
size_t hdrlen, n = 0;
- endhdrs = strstr(mapstart, "\n\n");
+ endhdrs = strnstr(mapstart, "\n\n", maplen);
if(endhdrs == NULL)
return NULL; /* The map doesn't map a file with a mail */
if(*next == '\n')
n++;
- retstr = xmalloc(hdrlen + n);
+ retstr = xmalloc(hdrlen + n + 1);
*hlen = hdrlen + n;
r = retstr;
cur = next + 1;
}
}
+ retstr[*hlen] = '\0';
return retstr;
}
ATF_TC_WITHOUT_HEAD(incindexfile);
ATF_TC_WITHOUT_HEAD(log_oper);
ATF_TC_WITHOUT_HEAD(get_preppedhdrs_from_map);
+ATF_TC_WITHOUT_HEAD(get_preppedhdrs_from_map_1);
#ifndef NELEM
#define NELEM(array) (sizeof(array) / sizeof((array)[0]))
ATF_TC_BODY(get_preppedhdrs_from_map, tc)
{
struct stat st;
+ char *hdr;
FILE *f = fopen("./mailfile", "w+");
fprintf(f, "head1: plop\nhead2\n\nbody\n");
char *map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
ATF_REQUIRE(map != NULL);
size_t len = 0;
- ATF_REQUIRE(get_preppedhdrs_from_map(map, &len) != NULL);
+ ATF_REQUIRE((hdr = get_preppedhdrs_from_map(map, st.st_size, &len)) != NULL);
ATF_REQUIRE_EQ(len, 20);
+ ATF_REQUIRE(strncmp(hdr, "head1: plop\r\nhead2\r\n", len) == 0);
+ ATF_REQUIRE_STREQ(hdr, "head1: plop\r\nhead2\r\n");
+ munmap(map, st.st_size);
+ close(fd);
+}
+
+ATF_TC_BODY(get_preppedhdrs_from_map_1, tc)
+{
+ struct stat st;
+ FILE *f = fopen("./mailfile", "w+");
+
+ fprintf(f, "head1: plop\nhead2\nbody\n");
+ fclose(f);
+
+ stat("./mailfile", &st);
+ int fd = open("./mailfile", O_RDONLY);
+ ATF_REQUIRE(fd != -1);
+ char *map = mmap(0, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
+ ATF_REQUIRE(map != NULL);
+ size_t len = 0;
+ ATF_REQUIRE(get_preppedhdrs_from_map(map, st.st_size, &len) == NULL);
munmap(map, st.st_size);
close(fd);
}
ATF_TP_ADD_TC(tp, incindexfile);
ATF_TP_ADD_TC(tp, log_oper);
ATF_TP_ADD_TC(tp, get_preppedhdrs_from_map);
+ ATF_TP_ADD_TC(tp, get_preppedhdrs_from_map_1);
return (atf_no_error());
}