]> granicus.if.org Git - php/commitdiff
fix #38269 (fopen wrapper doesn't fail on invalid hostname with curlwrappers enabled)
authorAntony Dovgal <tony2001@php.net>
Tue, 1 Aug 2006 13:26:56 +0000 (13:26 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 1 Aug 2006 13:26:56 +0000 (13:26 +0000)
ext/curl/streams.c

index 2941edf85546b4c876562f3528fd76ac05fbe6fb..f4600c00a7c7955c2e1bb8fa6fb1607a0b35e2d4 100644 (file)
@@ -396,15 +396,33 @@ php_stream *php_curl_stream_opener(php_stream_wrapper *wrapper, char *filename,
                /* fire up the connection; we need to detect a connection error here,
                 * otherwise the curlstream we return ends up doing nothing useful. */
                CURLMcode m;
+               CURLMsg *msg;
+               int msgs_left, msg_found = 0;
 
                while (CURLM_CALL_MULTI_PERFORM == (m = curl_multi_perform(curlstream->multi, &curlstream->pending))) {
                        ; /* spin */
                }
 
                if (m != CURLM_OK) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "There was an error mcode=%d", m);
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", curl_multi_strerror(m));
+                       php_stream_close(stream);
+                       return NULL;
+               }
+               
+               /* we have only one curl handle here, even though we use multi syntax, 
+                * so it's ok to fail on any error */
+               while ((msg = curl_multi_info_read(curlstream->multi, &msgs_left))) {
+                       if (msg->data.result == CURLE_OK) {
+                               continue;
+                       } else {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", curl_easy_strerror(msg->data.result));
+                               msg_found++;
+                       }
+               }
+               if (msg_found) {
+                       php_stream_close(stream);
+                       return NULL;
                }
-
        }
        
        return stream;