From: poleson at verio dot net Operating system: FreeBSD 4.4 PHP version: 5CVS-2003-02-19 (dev) PHP Bug Type: cURL related Bug description: crash on failed connection when curl_getinfo() was called
This actually applicable to ALL revisions of php. It is valid for curl to return a NULL s_code value in some situations. When add_assoc_string_ex() attempts to create the value in the array in this situation, a coredump is created. Better error checking is needed in this function. The patch included provides better checking and fixes the crash by not including content_type when it isnt a valid return type in these situation. This patch is for CVS current though it is the same in 4.3.1 but in curl.c instead. Patch included: ---------------------------------------------------------- --- interface.c.old Tue Feb 18 07:45:00 2003 +++ interface.c Wed Feb 19 16:48:42 2003 @@ -1101,46 +1101,68 @@ array_init(return_value); - curl_easy_getinfo(ch->cp, CURLINFO_EFFECTIVE_URL, &s_code); - CAAS("url", s_code); - curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_TYPE, &s_code); - CAAS("content_type", s_code); - curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code); - CAAL("http_code", l_code); - curl_easy_getinfo(ch->cp, CURLINFO_HEADER_SIZE, &l_code); - CAAL("header_size", l_code); - curl_easy_getinfo(ch->cp, CURLINFO_REQUEST_SIZE, &l_code); - CAAL("request_size", l_code); - curl_easy_getinfo(ch->cp, CURLINFO_FILETIME, &l_code); - CAAL("filetime", l_code); - curl_easy_getinfo(ch->cp, CURLINFO_SSL_VERIFYRESULT, &l_code); - CAAL("ssl_verify_result", l_code); - curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_COUNT, &l_code); - CAAL("redirect_count", l_code); - curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME, &d_code); - CAAD("total_time", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_NAMELOOKUP_TIME, &d_code); - CAAD("namelookup_time", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME, &d_code); - CAAD("connect_time", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_PRETRANSFER_TIME, &d_code); - CAAD("pretransfer_time", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_SIZE_UPLOAD, &d_code); - CAAD("size_upload", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_SIZE_DOWNLOAD, &d_code); - CAAD("size_download", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_SPEED_DOWNLOAD, &d_code); - CAAD("speed_download", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_SPEED_UPLOAD, &d_code); - CAAD("speed_upload", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d_code); - CAAD("download_content_length", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_UPLOAD, &d_code); - CAAD("upload_content_length", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_STARTTRANSFER_TIME, &d_code); - CAAD("starttransfer_time", d_code); - curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_TIME, &d_code); - CAAD("redirect_time", d_code); + if (curl_easy_getinfo(ch->cp, CURLINFO_EFFECTIVE_URL, &s_code) == CURLE_OK) { + CAAS("url", s_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_TYPE, &s_code) == CURLE_OK) { + if ( s_code != NULL ) { + CAAS("content_type", s_code); + } + } + if (curl_easy_getinfo(ch->cp, CURLINFO_HTTP_CODE, &l_code) == CURLE_OK) { + CAAL("http_code", l_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_HEADER_SIZE, &l_code) == CURLE_OK) { + CAAL("header_size", l_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_REQUEST_SIZE, &l_code) == CURLE_OK) { + CAAL("request_size", l_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_FILETIME, &l_code) == CURLE_OK) { + CAAL("filetime", l_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_SSL_VERIFYRESULT, &l_code) == CURLE_OK) { + CAAL("ssl_verify_result", l_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_COUNT, &l_code) == CURLE_OK) { + CAAL("redirect_count", l_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_TOTAL_TIME, &d_code) == CURLE_OK) { + CAAD("total_time", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_NAMELOOKUP_TIME, &d_code) == CURLE_OK) { + CAAD("namelookup_time", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_CONNECT_TIME, &d_code) == CURLE_OK) { + CAAD("connect_time", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_PRETRANSFER_TIME, &d_code) == CURLE_OK) { + CAAD("pretransfer_time", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_SIZE_UPLOAD, &d_code) == CURLE_OK) { + CAAD("size_upload", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_SIZE_DOWNLOAD, &d_code) == CURLE_OK) { + CAAD("size_download", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_SPEED_DOWNLOAD, &d_code) == CURLE_OK) { + CAAD("speed_download", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_SPEED_UPLOAD, &d_code) == CURLE_OK) { + CAAD("speed_upload", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &d_code) == CURLE_OK) { + CAAD("download_content_length", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_CONTENT_LENGTH_UPLOAD, &d_code) == CURLE_OK) { + CAAD("upload_content_length", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_STARTTRANSFER_TIME, &d_code) == CURLE_OK) { + CAAD("starttransfer_time", d_code); + } + if (curl_easy_getinfo(ch->cp, CURLINFO_REDIRECT_TIME, &d_code) == CURLE_OK) { + CAAD("redirect_time", d_code); + } } else { option = Z_LVAL_PP(zoption); switch (option) { -- Edit bug report at http://bugs.php.net/?id=22312&edit=1 -- Try a CVS snapshot: http://bugs.php.net/fix.php?id=22312&r=trysnapshot Fixed in CVS: http://bugs.php.net/fix.php?id=22312&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=22312&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=22312&r=needtrace Try newer version: http://bugs.php.net/fix.php?id=22312&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=22312&r=support Expected behavior: http://bugs.php.net/fix.php?id=22312&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=22312&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=22312&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=22312&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=22312&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=22312&r=dst IIS Stability: http://bugs.php.net/fix.php?id=22312&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=22312&r=gnused