diff --git a/src/defs.h b/src/defs.h index 64b6281..c2cbd1e 100644 --- a/src/defs.h +++ b/src/defs.h @@ -207,6 +207,7 @@ int bodylen; int tolen; + int todomainlen; int journaltolen; int retention; diff --git a/src/parser.c b/src/parser.c index 9f324c8..7a91431 100644 --- a/src/parser.c +++ b/src/parser.c @@ -144,7 +144,7 @@ unsigned char b64buffer[MAXBUFSIZE]; char tmpbuf[MAXBUFSIZE]; int n64, writelen, boundary_line=0, result; - unsigned int len; + unsigned int len, domainlen; if(cfg->debug == 1) printf("line: %s", buf); @@ -170,6 +170,7 @@ memset(state->b_to, 0, MAXBUFSIZE); state->tolen = 0; memset(state->b_to_domain, 0, SMALLBUFSIZE); + state->todomainlen = 0; clearhash(state->rcpt); clearhash(state->rcpt_domain); @@ -721,7 +722,12 @@ if(q){ if(findnode(state->rcpt_domain, q+1) == NULL){ addnode(state->rcpt_domain, q+1); - memcpy(&(state->b_to_domain[strlen(state->b_to_domain)]), q+1, strlen(q+1)); + domainlen = strlen(q+1); + + if(state->todomainlen < SMALLBUFSIZE-domainlen-1){ + memcpy(&(state->b_to_domain[state->todomainlen]), q+1, domainlen); + state->todomainlen += domainlen; + } } } diff --git a/src/parser_utils.c b/src/parser_utils.c index 0b06ee6..d8f75aa 100644 --- a/src/parser_utils.c +++ b/src/parser_utils.c @@ -96,6 +96,7 @@ memset(state->b_journal_to, 0, MAXBUFSIZE); state->tolen = 0; + state->todomainlen = 0; state->bodylen = 0; state->journaltolen = 0;