Loading docs/KNOWN_BUGS +8 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,14 @@ join in and help us correct one or more of these! Also be sure to check the changelog of the current development status, as one or more of these problems may have been fixed since this was written! 83. curl is unable to load non-default openssl engines, because openssl isn't initialized properly. This seems to require OpenSSL_config() or CONF_modules_load_file() to be used by libcurl but the first seems to not work and we've gotten not reports from tests with the latter. Possibly we need to discuss with OpenSSL developers how this is supposed to be done. We need users with actual external openssl engines for testing to work on this. http://curl.haxx.se/bug/view.cgi?id=1208 82. When building with the Windows Borland compiler, it fails because the "tlib" tool doesn't support hyphens (minus signs) in file names and we have such in the build. Loading lib/easy.c +56 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,11 @@ #include <sys/param.h> #endif #if defined(HAVE_SIGNAL_H) && defined(HAVE_SIGACTION) && defined(USE_OPENSSL) #define SIGPIPE_IGNORE 1 #include <signal.h> #endif #include "strequal.h" #include "urldata.h" #include <curl/curl.h> Loading Loading @@ -81,6 +86,49 @@ /* The last #include file should be: */ #include "memdebug.h" #ifdef SIGPIPE_IGNORE #define SIGPIPE_VARIABLE(x) struct sigaction x /* * sigpipe_ignore() makes sure we ignore SIGPIPE while running libcurl * internals, and then sigpipe_restore() will restore the situation when we * return from libcurl again. */ static void sigpipe_ignore(struct SessionHandle *data, struct sigaction *pipe) { if(!data->set.no_signal) { struct sigaction action; /* first, extract the existing situation */ sigaction(SIGPIPE, NULL, pipe); action = *pipe; /* ignore this signal */ action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); } } /* * sigpipe_restore() puts back the outside world's opinion of signal handler * and SIGPIPE handling. It MUST only be called after a corresponding * sigpipe_ignore() was used. */ static void sigpipe_restore(struct SessionHandle *data, struct sigaction *pipe) { if(!data->set.no_signal) { /* restore the outside state */ sigaction(SIGPIPE, pipe, NULL); } } #else /* for systems without sigaction */ #define sigpipe_ignore(x,y) #define sigpipe_restore(x,y) #define SIGPIPE_VARIABLE(x) #endif /* win32_cleanup() is for win32 socket cleanup functionality, the opposite of win32_init() */ static void win32_cleanup(void) Loading Loading @@ -423,6 +471,7 @@ CURLcode curl_easy_perform(CURL *easy) int without_fds = 0; /* count number of consecutive returns from curl_multi_wait() without any filedescriptors */ struct timeval before; SIGPIPE_VARIABLE(pipe); if(!easy) return CURLE_BAD_FUNCTION_ARGUMENT; Loading Loading @@ -455,6 +504,8 @@ CURLcode curl_easy_perform(CURL *easy) return CURLE_FAILED_INIT; } sigpipe_ignore(data, &pipe); /* assign this after curl_multi_add_handle() since that function checks for it and rejects this handle otherwise */ data->multi = multi; Loading Loading @@ -511,6 +562,8 @@ CURLcode curl_easy_perform(CURL *easy) a failure here, room for future improvement! */ (void)curl_multi_remove_handle(multi, easy); sigpipe_restore(data, &pipe); /* The multi handle is kept alive, owned by the easy handle */ return code; } Loading @@ -522,11 +575,14 @@ CURLcode curl_easy_perform(CURL *easy) void curl_easy_cleanup(CURL *curl) { struct SessionHandle *data = (struct SessionHandle *)curl; SIGPIPE_VARIABLE(pipe); if(!data) return; sigpipe_ignore(data, &pipe); Curl_close(data); sigpipe_restore(data, &pipe); } /* Loading tests/data/test1230 +1 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ Host: [1234:1234:1234::4ce]:%HTTPPORT Proxy-Connection: Keep-Alive GET /wanted/page/1230 HTTP/1.1 Host: [1234:1234:1234::4ce]:8990 Host: [1234:1234:1234::4ce]:%HTTPPORT Accept: */* </protocol> Loading tests/data/test1396 +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ unittest curl_easy_escape and curl_easy_unescape </name> <tool> unit1310 unit1396 </tool> </client> Loading curl-config.in +6 −6 File changed.Contains only whitespace changes. Show changes Loading
docs/KNOWN_BUGS +8 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,14 @@ join in and help us correct one or more of these! Also be sure to check the changelog of the current development status, as one or more of these problems may have been fixed since this was written! 83. curl is unable to load non-default openssl engines, because openssl isn't initialized properly. This seems to require OpenSSL_config() or CONF_modules_load_file() to be used by libcurl but the first seems to not work and we've gotten not reports from tests with the latter. Possibly we need to discuss with OpenSSL developers how this is supposed to be done. We need users with actual external openssl engines for testing to work on this. http://curl.haxx.se/bug/view.cgi?id=1208 82. When building with the Windows Borland compiler, it fails because the "tlib" tool doesn't support hyphens (minus signs) in file names and we have such in the build. Loading
lib/easy.c +56 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,11 @@ #include <sys/param.h> #endif #if defined(HAVE_SIGNAL_H) && defined(HAVE_SIGACTION) && defined(USE_OPENSSL) #define SIGPIPE_IGNORE 1 #include <signal.h> #endif #include "strequal.h" #include "urldata.h" #include <curl/curl.h> Loading Loading @@ -81,6 +86,49 @@ /* The last #include file should be: */ #include "memdebug.h" #ifdef SIGPIPE_IGNORE #define SIGPIPE_VARIABLE(x) struct sigaction x /* * sigpipe_ignore() makes sure we ignore SIGPIPE while running libcurl * internals, and then sigpipe_restore() will restore the situation when we * return from libcurl again. */ static void sigpipe_ignore(struct SessionHandle *data, struct sigaction *pipe) { if(!data->set.no_signal) { struct sigaction action; /* first, extract the existing situation */ sigaction(SIGPIPE, NULL, pipe); action = *pipe; /* ignore this signal */ action.sa_handler = SIG_IGN; sigaction(SIGPIPE, &action, NULL); } } /* * sigpipe_restore() puts back the outside world's opinion of signal handler * and SIGPIPE handling. It MUST only be called after a corresponding * sigpipe_ignore() was used. */ static void sigpipe_restore(struct SessionHandle *data, struct sigaction *pipe) { if(!data->set.no_signal) { /* restore the outside state */ sigaction(SIGPIPE, pipe, NULL); } } #else /* for systems without sigaction */ #define sigpipe_ignore(x,y) #define sigpipe_restore(x,y) #define SIGPIPE_VARIABLE(x) #endif /* win32_cleanup() is for win32 socket cleanup functionality, the opposite of win32_init() */ static void win32_cleanup(void) Loading Loading @@ -423,6 +471,7 @@ CURLcode curl_easy_perform(CURL *easy) int without_fds = 0; /* count number of consecutive returns from curl_multi_wait() without any filedescriptors */ struct timeval before; SIGPIPE_VARIABLE(pipe); if(!easy) return CURLE_BAD_FUNCTION_ARGUMENT; Loading Loading @@ -455,6 +504,8 @@ CURLcode curl_easy_perform(CURL *easy) return CURLE_FAILED_INIT; } sigpipe_ignore(data, &pipe); /* assign this after curl_multi_add_handle() since that function checks for it and rejects this handle otherwise */ data->multi = multi; Loading Loading @@ -511,6 +562,8 @@ CURLcode curl_easy_perform(CURL *easy) a failure here, room for future improvement! */ (void)curl_multi_remove_handle(multi, easy); sigpipe_restore(data, &pipe); /* The multi handle is kept alive, owned by the easy handle */ return code; } Loading @@ -522,11 +575,14 @@ CURLcode curl_easy_perform(CURL *easy) void curl_easy_cleanup(CURL *curl) { struct SessionHandle *data = (struct SessionHandle *)curl; SIGPIPE_VARIABLE(pipe); if(!data) return; sigpipe_ignore(data, &pipe); Curl_close(data); sigpipe_restore(data, &pipe); } /* Loading
tests/data/test1230 +1 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,7 @@ Host: [1234:1234:1234::4ce]:%HTTPPORT Proxy-Connection: Keep-Alive GET /wanted/page/1230 HTTP/1.1 Host: [1234:1234:1234::4ce]:8990 Host: [1234:1234:1234::4ce]:%HTTPPORT Accept: */* </protocol> Loading
tests/data/test1396 +1 −1 Original line number Diff line number Diff line Loading @@ -20,7 +20,7 @@ unittest curl_easy_escape and curl_easy_unescape </name> <tool> unit1310 unit1396 </tool> </client> Loading