Loading CHANGES +6 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,12 @@ Changelog Yang Tse (12 Mar 2009) - Added missing Curl_read() return code checking in TELNET transfers. - Pierre Brico found and fixed TELNET transfers not being aborted upon a write callback failure. Daniel Stenberg (11 Mar 2009) - Kamil Dudka made the curl tool properly call curl_global_init() before any other libcurl function. Loading RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ This release includes the following bugfixes: o an alloc-related call in the OpenSSL-using code didn't check the return value o curl_easy_duphandle() failed to duplicate cookies at times o missing TELNET timeout support in Windows builds o missing Curl_read() and write callback result checking in TELNET transfers This release includes the following known bugs: Loading lib/telnet.c +26 −10 Original line number Diff line number Diff line Loading @@ -108,7 +108,7 @@ static CURLcode check_wsock2 ( struct SessionHandle *data ); #endif static void telrcv(struct connectdata *, CURLcode telrcv(struct connectdata *, const unsigned char *inbuf, /* Data received from socket */ ssize_t count); /* Number of bytes received */ Loading Loading @@ -952,19 +952,26 @@ static void suboption(struct connectdata *conn) } static void telrcv(struct connectdata *conn, CURLcode telrcv(struct connectdata *conn, const unsigned char *inbuf, /* Data received from socket */ ssize_t count) /* Number of bytes received */ { unsigned char c; CURLcode result; int in = 0; int startwrite=-1; struct SessionHandle *data = conn->data; struct TELNET *tn = (struct TELNET *)data->state.proto.telnet; #define startskipping() \ if(startwrite >= 0) \ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)&inbuf[startwrite], in-startwrite); \ if(startwrite >= 0) { \ result = Curl_client_write(conn, \ CLIENTWRITE_BODY, \ (char *)&inbuf[startwrite], \ in-startwrite); \ if(result != CURLE_OK) \ return result; \ } \ startwrite = -1 #define writebyte() \ Loading Loading @@ -1119,6 +1126,7 @@ void telrcv(struct connectdata *conn, ++in; } bufferflush(); return CURLE_OK; } /* Escape and send a telnet data block */ Loading Loading @@ -1389,7 +1397,11 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done) break; } telrcv(conn, (unsigned char *)buf, nread); code = telrcv(conn, (unsigned char *)buf, nread); if(code) { keepon = FALSE; break; } fflush(stdout); Loading Loading @@ -1475,7 +1487,11 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done) break; } telrcv(conn, (unsigned char *)buf, nread); code = telrcv(conn, (unsigned char *)buf, nread); if(code) { keepon = FALSE; break; } /* Negotiate if the peer has started negotiating, otherwise don't. We don't want to speak telnet with Loading Loading
CHANGES +6 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,12 @@ Changelog Yang Tse (12 Mar 2009) - Added missing Curl_read() return code checking in TELNET transfers. - Pierre Brico found and fixed TELNET transfers not being aborted upon a write callback failure. Daniel Stenberg (11 Mar 2009) - Kamil Dudka made the curl tool properly call curl_global_init() before any other libcurl function. Loading
RELEASE-NOTES +1 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ This release includes the following bugfixes: o an alloc-related call in the OpenSSL-using code didn't check the return value o curl_easy_duphandle() failed to duplicate cookies at times o missing TELNET timeout support in Windows builds o missing Curl_read() and write callback result checking in TELNET transfers This release includes the following known bugs: Loading
lib/telnet.c +26 −10 Original line number Diff line number Diff line Loading @@ -108,7 +108,7 @@ static CURLcode check_wsock2 ( struct SessionHandle *data ); #endif static void telrcv(struct connectdata *, CURLcode telrcv(struct connectdata *, const unsigned char *inbuf, /* Data received from socket */ ssize_t count); /* Number of bytes received */ Loading Loading @@ -952,19 +952,26 @@ static void suboption(struct connectdata *conn) } static void telrcv(struct connectdata *conn, CURLcode telrcv(struct connectdata *conn, const unsigned char *inbuf, /* Data received from socket */ ssize_t count) /* Number of bytes received */ { unsigned char c; CURLcode result; int in = 0; int startwrite=-1; struct SessionHandle *data = conn->data; struct TELNET *tn = (struct TELNET *)data->state.proto.telnet; #define startskipping() \ if(startwrite >= 0) \ Curl_client_write(conn, CLIENTWRITE_BODY, (char *)&inbuf[startwrite], in-startwrite); \ if(startwrite >= 0) { \ result = Curl_client_write(conn, \ CLIENTWRITE_BODY, \ (char *)&inbuf[startwrite], \ in-startwrite); \ if(result != CURLE_OK) \ return result; \ } \ startwrite = -1 #define writebyte() \ Loading Loading @@ -1119,6 +1126,7 @@ void telrcv(struct connectdata *conn, ++in; } bufferflush(); return CURLE_OK; } /* Escape and send a telnet data block */ Loading Loading @@ -1389,7 +1397,11 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done) break; } telrcv(conn, (unsigned char *)buf, nread); code = telrcv(conn, (unsigned char *)buf, nread); if(code) { keepon = FALSE; break; } fflush(stdout); Loading Loading @@ -1475,7 +1487,11 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done) break; } telrcv(conn, (unsigned char *)buf, nread); code = telrcv(conn, (unsigned char *)buf, nread); if(code) { keepon = FALSE; break; } /* Negotiate if the peer has started negotiating, otherwise don't. We don't want to speak telnet with Loading