Loading lib/pop3.c +35 −6 Original line number Diff line number Diff line Loading @@ -421,6 +421,16 @@ static CURLcode pop3_state_list_resp(struct connectdata *conn, return CURLE_RECV_ERROR; } /* This 'OK' line ends with a CR LF pair which is the two first bytes of the EOB string so count this is two matching bytes. This is necessary to make the code detect the EOB if the only data than comes now is %2e CR LF like when there is no body to return. */ pop3c->eob = 2; /* But since this initial CR LF pair is not part of the actual body, we set the strip counter here so that these bytes won't be delivered. */ pop3c->strip = 2; /* POP3 download */ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, pop3->bytecountp, -1, NULL); /* no upload here */ Loading Loading @@ -1082,6 +1092,16 @@ CURLcode Curl_pop3_write(struct connectdata *conn, return CURLE_OK; } else if(prev && (prev >= pop3c->eob)) { /* strip can only be non-zero for the very first mismatch after CRLF and then both prev and strip are equal and nothing will be output below */ while(prev && pop3c->strip) { prev--; pop3c->strip--; } if(prev) { /* write out the body part that didn't match */ result = Curl_client_write(conn, CLIENTWRITE_BODY, (char*)POP3_EOB, prev); Loading @@ -1089,12 +1109,21 @@ CURLcode Curl_pop3_write(struct connectdata *conn, return result; } } } if(pop3c->eob) /* while EOB is matching, don't output it! */ return CURLE_OK; while(nread && pop3c->strip) { nread--; pop3c->strip--; str++; } if(nread) { result = Curl_client_write(conn, CLIENTWRITE_BODY, str, nread); } return result; } Loading lib/pop3.h +2 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2009, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 2009 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms Loading Loading @@ -46,6 +46,7 @@ struct pop3_conn { char *mailbox; /* what to RETR */ size_t eob; /* number of bytes of the EOB (End Of Body) that has been received thus far */ size_t strip; /* number of bytes from the start to ignore as non-body */ pop3state state; /* always use pop3.c:state() to change state! */ }; Loading tests/data/DISABLED +0 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ # test cases are run by runtests.pl. Just add the plain test case numbers, one # per line. # Lines starting with '#' letters are treated as comments. 811 815 591 592 Loading Loading
lib/pop3.c +35 −6 Original line number Diff line number Diff line Loading @@ -421,6 +421,16 @@ static CURLcode pop3_state_list_resp(struct connectdata *conn, return CURLE_RECV_ERROR; } /* This 'OK' line ends with a CR LF pair which is the two first bytes of the EOB string so count this is two matching bytes. This is necessary to make the code detect the EOB if the only data than comes now is %2e CR LF like when there is no body to return. */ pop3c->eob = 2; /* But since this initial CR LF pair is not part of the actual body, we set the strip counter here so that these bytes won't be delivered. */ pop3c->strip = 2; /* POP3 download */ Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, pop3->bytecountp, -1, NULL); /* no upload here */ Loading Loading @@ -1082,6 +1092,16 @@ CURLcode Curl_pop3_write(struct connectdata *conn, return CURLE_OK; } else if(prev && (prev >= pop3c->eob)) { /* strip can only be non-zero for the very first mismatch after CRLF and then both prev and strip are equal and nothing will be output below */ while(prev && pop3c->strip) { prev--; pop3c->strip--; } if(prev) { /* write out the body part that didn't match */ result = Curl_client_write(conn, CLIENTWRITE_BODY, (char*)POP3_EOB, prev); Loading @@ -1089,12 +1109,21 @@ CURLcode Curl_pop3_write(struct connectdata *conn, return result; } } } if(pop3c->eob) /* while EOB is matching, don't output it! */ return CURLE_OK; while(nread && pop3c->strip) { nread--; pop3c->strip--; str++; } if(nread) { result = Curl_client_write(conn, CLIENTWRITE_BODY, str, nread); } return result; } Loading
lib/pop3.h +2 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2009, Daniel Stenberg, <daniel@haxx.se>, et al. * Copyright (C) 2009 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms Loading Loading @@ -46,6 +46,7 @@ struct pop3_conn { char *mailbox; /* what to RETR */ size_t eob; /* number of bytes of the EOB (End Of Body) that has been received thus far */ size_t strip; /* number of bytes from the start to ignore as non-body */ pop3state state; /* always use pop3.c:state() to change state! */ }; Loading
tests/data/DISABLED +0 −1 Original line number Diff line number Diff line Loading @@ -2,7 +2,6 @@ # test cases are run by runtests.pl. Just add the plain test case numbers, one # per line. # Lines starting with '#' letters are treated as comments. 811 815 591 592 Loading