]> granicus.if.org Git - curl/commitdiff
Add Curl_read() return code checking
authorYang Tse <yangsita@gmail.com>
Thu, 12 Mar 2009 02:12:05 +0000 (02:12 +0000)
committerYang Tse <yangsita@gmail.com>
Thu, 12 Mar 2009 02:12:05 +0000 (02:12 +0000)
lib/telnet.c

index d0d211a6bcc53de131b19066a8748d98dbd3ce34..109e081d8bcead49160d824f438f24befe1dbf52 100644 (file)
@@ -1200,6 +1200,7 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
   int interval_ms;
   struct pollfd pfd[2];
 #endif
+  int ret;
   ssize_t nread;
   struct timeval now;
   bool keepon = TRUE;
@@ -1370,8 +1371,23 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
         break;
       }
       if(events.lNetworkEvents & FD_READ) {
-        /* This reallu OUGHT to check its return code. */
-        (void)Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
+        /* read data from network */
+        ret = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
+        /* returned sub-zero, this would've blocked. Loop again */
+        if(ret < 0)
+          break;
+        /* returned not-zero, this an error */
+        else if(ret) {
+          keepon = FALSE;
+          code = (CURLcode)ret;
+          break;
+        }
+        /* returned zero but actually received 0 or less here,
+           the server closed the connection and we bail out */
+        else if(nread <= 0) {
+          keepon = FALSE;
+          break;
+        }
 
         telrcv(conn, (unsigned char *)buf, nread);
 
@@ -1441,12 +1457,20 @@ static CURLcode telnet_do(struct connectdata *conn, bool *done)
       }
 
       if(pfd[0].revents & POLLIN) {
-        /* This OUGHT to check the return code... */
-        (void)Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
-
-        /* if we receive 0 or less here, the server closed the connection and
-           we bail out from this! */
-        if(nread <= 0) {
+        /* read data from network */
+        ret = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
+        /* returned sub-zero, this would've blocked. Loop again */
+        if(ret < 0)
+          break;
+        /* returned not-zero, this an error */
+        else if(ret) {
+          keepon = FALSE;
+          code = (CURLcode)ret;
+          break;
+        }
+        /* returned zero but actually received 0 or less here,
+           the server closed the connection and we bail out */
+        else if(nread <= 0) {
           keepon = FALSE;
           break;
         }