diff options
Diffstat (limited to 'tests/libtest/lib1939.c')
-rw-r--r-- | tests/libtest/lib1939.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/libtest/lib1939.c b/tests/libtest/lib1939.c new file mode 100644 index 000000000..644617712 --- /dev/null +++ b/tests/libtest/lib1939.c @@ -0,0 +1,73 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.haxx.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ***************************************************************************/ + +#include "test.h" + +#include "memdebug.h" + +int test(char *URL) +{ + CURLM *multi; + CURL *easy; + int running_handles; + + curl_global_init(CURL_GLOBAL_DEFAULT); + + multi = curl_multi_init(); + if(!multi) + return 1; + + easy = curl_easy_init(); + if(easy) { + CURLcode c; + CURLMcode m; + + /* Crash only happens when using HTTPS */ + c = curl_easy_setopt(easy, CURLOPT_URL, URL); + if(!c) + /* Any old HTTP tunneling proxy will do here */ + c = curl_easy_setopt(easy, CURLOPT_PROXY, libtest_arg2); + + if(c) + return 2; + + /* We're going to drive the transfer using multi interface here, because we + want to stop during the middle. */ + m = curl_multi_add_handle(multi, easy); + + if(!m) + /* Run the multi handle once, just enough to start establishing an HTTPS + connection. */ + m = curl_multi_perform(multi, &running_handles); + + if(m) + return 3; + + /* Close the easy handle *before* the multi handle. Doing it the other way + around avoids the issue. */ + curl_easy_cleanup(easy); + } + curl_multi_cleanup(multi); /* double-free happens here */ + + curl_global_cleanup(); + return CURLE_OK; +} |