Update libcurl from 7.49.1 to 7.50.1.

Bug: 31271247
Test: Build and run update_engine with the new version. mmma external/curl

Note: This patch includes the following squashed commits from upstream:

commit f2cb3a01192d36395d16acec6cdb93446ca6fd45
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Aug 3 08:37:16 2016 +0200

    THANKS: 7 new contributors from the 7.50.1 release

commit 95addfe828999399f1a3458c547dbd159e9df81e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Aug 2 11:30:41 2016 +0200

    RELEASE-NOTES: 7.50.1

commit 11ec5ad4352bba384404c56e77c7fab9382fd22d
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun Jul 31 00:51:48 2016 +0200

    TLS: only reuse connections with the same client cert

    CVE-2016-5420
    Bug: https://curl.haxx.se/docs/adv_20160803B.html

commit 247d890da88f9ee817079e246c59f3d7d12fde5f
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Fri Jul 1 13:32:31 2016 +0200

    TLS: switch off SSL session id when client cert is used

    CVE-2016-5419
    Bug: https://curl.haxx.se/docs/adv_20160803A.html
    Reported-by: Bru Rom
    Contributions-by: Eric Rescorla and Ray Satiro

commit 75dc096e01ef1e21b6c57690d99371dedb2c0b80
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun Jul 31 01:09:04 2016 +0200

    curl_multi_cleanup: clear connection pointer for easy handles

    CVE-2016-5421
    Bug: https://curl.haxx.se/docs/adv_20160803C.html
    Reported-by: Marcelo Echeverria and Fernando Muñoz

commit 9cb1059f92286a6eb5d28c477fdd3f26aed1d554
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Aug 3 00:24:08 2016 +0200

    KNOWN_BUGS: SOCKS proxy not working via IPv6

    Closes #835

commit ac09c422d36c0d1c946bed6d4d99b83cced9eaba
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Aug 3 00:21:42 2016 +0200

    KNOWN_BUGS: CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM

    Closes #768

commit 80ab2b5ad9360fce3c313ed03050ce61631e2c78
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Aug 3 00:19:53 2016 +0200

    KNOWN_BUGS: transfer-encoding: chunked in HTTP/2

    Closes #662

commit 52276b51e056ed7855884e1960ba80dde6e1b6dd
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Aug 3 00:15:58 2016 +0200

    TODO: Provide cmake config-file

    Closes #885

commit a0c2ab93700069a03fad0115442bad9a3ca996fe
Author: Patrick Monnerat <patrick.monnerat@dh.com>
Date:   Tue Aug 2 14:21:31 2016 +0200

    os400: define BUILDING_LIBCURL in make script.

commit 2136a6a8924000fb82e23b00c6365db4310574ee
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Mon Aug 1 23:40:27 2016 +0200

    RELEASE-NOTES: synced with aa9f536a18b

commit aa9f536a18b4c222961fbacd9347d06928eec458
Author: Thomas Glanzmann <thomas@glanzmann.de>
Date:   Mon Aug 1 13:16:42 2016 -0400

    mbedtls: Fix debug function name

    This patch is necessary so that curl compiles if MBEDTLS_DEBUG is
    defined.

    Bug: https://curl.haxx.se/mail/lib-2016-08/0001.html

commit 120fe1a22deecde49b9c46b125285d0cf846b159
Author: Sergei Nikulov <sergey.nikulov@gmail.com>
Date:   Mon Aug 1 15:42:15 2016 +0300

    travis: fix OSX build by re-installing libtool

    Apparently due to a broken homebrew install

    fixes #934
    Closes #939

commit 608b11a91f4e994d26f99baf4dd0a7dff03578ab
Author: Martin Vejnár <martin.vejnar@avg.com>
Date:   Mon Aug 1 10:18:55 2016 +0200

    win32: fix a potential memory leak in Curl_load_library

    If a call to GetSystemDirectory fails, the `path` pointer that was
    previously allocated would be leaked. This makes sure that `path` is
    always freed.

    Closes #938

commit d6604524ad24daf4581efbe0020da058d2b3af84
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun Jul 31 11:48:44 2016 +0200

    include: revert 9adf3c4 and make public types void * again

    Many applications assume the actual contents of the public types and use
    that do for example forward declarations (saving them from including our
    public header) which then breaks when we switch from void * to a struct
    *.

    I'm not convinced we were wrong, but since this practise seems
    widespread enough I'm willing to (partly) step down.

    Now libcurl uses the struct itself when it is built and it allows
    applications to use the struct type if CURL_STRICTER is defined at the
    time of the #include.

    Reported-by: Peter Frühberger
    Fixes #926

commit 2bbed9c4f0d2c192cd3b3b61fd6a1c21911936c3
Author: Yonggang Luo <luoyonggang@gmail.com>
Date:   Fri Jul 15 02:16:18 2016 +0800

    cmake: Fix for schannel support

    The check_library_exists_concat do not check crypt32 library properly.
    So include it directly.

    Bug: https://github.com/curl/curl/pull/917
    Reported-by: Yonggang Luo

    Bug: https://github.com/curl/curl/issues/935
    Reported-by: Alain Danteny

commit cb9ba5cf8dfca61d8ce96086330ccde967c2d418
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Thu Jul 28 00:52:44 2016 -0400

    Revert "travis: Install libtool for OS X builds"

    Didn't work.

    This reverts commit 50723585ed380744358de054e2a55dccee65dfd7.

commit 50723585ed380744358de054e2a55dccee65dfd7
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Thu Jul 28 00:36:55 2016 -0400

    travis: Install libtool for OS X builds

    CI is failing due to missing libtoolize, so I'm trying this.

commit 17bf323221cf1852457eb29a861e589b5e5e7aa3
Author: Viktor Szakats <vszakats@users.noreply.github.com>
Date:   Tue Jul 26 16:36:29 2016 +0200

    TODO: minor typo in last commit

    merged #931

commit f3cad5bbf2fa2487061ce0f4a15dc2c334ba410e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jul 26 16:01:50 2016 +0200

    TODO: Timeout idle connections from the pool

commit ea886941841610e15ae9fe4244434cd7a700b7a6
Author: Patrick Monnerat <patrick.monnerat@dh.com>
Date:   Mon Jul 25 18:58:23 2016 +0200

    os400: minimum supported OS version: V6R1M0.
    Do not log compilation informational messages.

commit 6b130d6be6607dce07d1054af929b17b969f3bf5
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Sun Jul 24 02:49:47 2016 -0400

    tests: Fix for http/2 feature

    Bug: https://curl.haxx.se/mail/lib-2016-07/0070.html
    Reported-by: Paul Howarth

commit 1979008703cb50bab16111658202cfd05745f0d8
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Sat Jul 23 21:34:46 2016 +0100

    README: Mention wolfSSL in the 'Dependencies' section

commit 3fc845914ad050fcb78ddb8ab947ddbe3928de2a
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Fri Jul 22 20:42:20 2016 +0100

    vauth.h: No need to query HAVE_GSSAPI || USE_WINDOWS_SSPI for SPNEGO

    As SPNEGO is only defined when these pre-processor variables are defined
    there is no need to query them explicitly.

commit 25bf71ab0757694e691ad77c48fa6c438df9416e
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Fri Jul 22 20:38:32 2016 +0100

    spnego: Corrected miss-placed * in Curl_auth_spnego_cleanup() declaration

    Typo introduced in commit ad5e9bfd5d.

commit c7468e8ea2eeac748bb1f3d1410d2de55e9b5802
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Fri Jul 22 01:47:13 2016 +0200

    SECURITY: mention how to get windows-specific CVEs

    ... and make the distros link a proper link

commit 47fa8f0dae69ffe1e7a6ad1e7a6075d8cbe804a4
Author: Dan Fandrich <dan@coneharvesters.com>
Date:   Thu Jul 21 17:06:04 2016 +0200

    test558: fix test by stripping file paths from FD lines

commit 5e26d9ceeaca8a6730bf405e6512bfe542698c26
Author: Kamil Dudka <kdudka@redhat.com>
Date:   Thu Jul 21 13:03:16 2016 +0200

    tests: distribute the http2-server.pl script, too

commit 8b9ba132f0aad9ba1ada8879ab2a9bb03eba57f6
Author: Kamil Dudka <kdudka@redhat.com>
Date:   Thu Jul 21 12:49:43 2016 +0200

    docs: distribute the CURLINFO_HTTP_VERSION(3) man page, too

commit 001f8d06fef3c5f1e3b2ab45a2f46de39b70bd9e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Thu Jul 21 11:16:08 2016 +0200

    bump: start working on 7.50.1

commit 79e63a53bb9598af863b0afe49ad662795faeef4
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Thu Jul 21 01:53:01 2016 +0200

    RELEASE-NOTES: version 7.50.0 ready

commit d78cf1f03a30d9c19eb6eaefce367ea5278361b9
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Thu Jul 21 00:34:01 2016 +0200

    THANKS: 13 new contributors from the 7.50.0 release

commit af8eb69cb29d4cc05eea9578514fe16572443b72
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Thu Jul 21 01:37:29 2016 -0400

    winbuild: fix embedded manifest option

    Embedded manifest option didn't work due to typo.

    Reported-by: Stefan Kanthak

commit c5cffce56e4c6f6c26e82438a61abf85e39cac4a
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Wed Jul 20 22:00:45 2016 -0400

    vauth: Fix memleak by freeing credentials if out of memory

    This is a follow up to the parent commit dcdd4be which fixes one leak
    but creates another by failing to free the credentials handle if out of
    memory. Also there's a second location a few lines down where we fail to
    do same. This commit fixes both of those issues.

commit dcdd4be35213d4ba36e41ad92fe2ae4ddab1205d
Author: Saurav Babu <saurav.babu@samsung.com>
Date:   Wed Jul 20 11:08:02 2016 +0200

    vauth: Fixed memory leak due to function returning without free

    This patch allocates memory to "output_token" only when it is required
    so that memory is not leaked if function returns.

commit c6d3fa11e687808ea9f0047d591a39135a4b9f4e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jul 20 23:04:06 2016 +0200

    test558: updated after ipv6-check move

    Follow-up commit to c50980807c5 to make this test pass.

commit 4ee203542d042e9ba4f137ab252637742998de42
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Wed Jul 20 02:49:19 2016 -0400

    connect: disable TFO on Linux when using SSL

    - Linux TFO + TLS is not implemented yet.

    Bug: https://github.com/curl/curl/issues/907

commit 57ac61a46907edc068fbd0f221751b48082fdfce
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jul 19 23:10:39 2016 +0200

    ROADMAP: QUIC and TLS 1.3

commit 545562f13e27da87275e421a3b54d063cf2e494e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jul 19 23:04:26 2016 +0200

    RELEASE-NOTES: synced with c50980807c5

commit c50980807c55f91c2fb2d09f3b6dc0ae69f4cf45
Author: Brian Prodoehl <bprodoehl@connectify.me>
Date:   Fri Jul 15 11:53:13 2016 -0400

    curl_global_init: Check if IPv6 works

    - Curl_ipv6works() is not thread-safe until after the first call, so
    call it once during global init to avoid a possible race condition.

    Bug: https://github.com/curl/curl/issues/915
    PR: https://github.com/curl/curl/pull/918

commit 16fe3f6b0a73fa4e3e1c2298143e11f4fb4d5f6a
Author: Timothy Polich <tpolich@users.noreply.github.com>
Date:   Wed Jul 13 18:45:32 2016 -0700

    CURLMOPT_SOCKETFUNCTION.3: fix typo

    Closes https://github.com/curl/curl/pull/914

commit bf430ecdef3d7c49cf01a57e3289ff7aaa1e0278
Author: Miroslav Franc <mfranc@gmx.com>
Date:   Wed Jul 13 18:43:18 2016 +0200

    library: Fix memory leaks found during static analysis

    Closes https://github.com/curl/curl/pull/913

commit bcc8f485e5e364deb6b5ad8502635b4358aaa277
Author: Viktor Szakats <vszakats@users.noreply.github.com>
Date:   Tue Jul 12 22:44:31 2016 +0200

    cookie.c: Fix misleading indentation

    Closes https://github.com/curl/curl/pull/911

commit f9eed596a3115e583a124ccf7f929573ee5a7da4
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Sat Jul 9 03:05:55 2016 -0400

    FAQ: Update FTP directory listing section for MLSD command

    Explain how some FTP servers support the machine readable listing
    format MLSD from RFC 3659 and compare it to LIST.

    Ref: https://github.com/curl/curl/issues/906

commit 7c9cfd6c5145217e9678310ac0677494a59da36e
Author: Sergei Nikulov <sergey.nikulov@gmail.com>
Date:   Wed Jun 22 15:42:10 2016 +0300

    Appveyor: Updates for options - CURL_STATICLIB/BUILD_TESTING

    Closes #892

commit c4f108ece8be881bf70edbd5d22334d1143be88c
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Thu Jun 30 23:45:49 2016 +0200

    TODO: 17.4 also brings more HTTP/2 support

commit a194e6c9ae40ffe3ab5e281f1096358cdd369d3e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Thu Jun 30 23:42:06 2016 +0200

    TODO: try next proxy if one doesn't work

    Closes #896

commit 6655e3069120cd069be9b7e2ff268342513c93bf
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 29 23:11:43 2016 +0200

    conn: don't free easy handle data in handler->disconnect

    Reported-by: Gou Lingfeng
    Bug: https://curl.haxx.se/mail/lib-2016-06/0139.html

commit e89489d8f4ceb869ae4e080b34053d4ecba22955
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 29 23:06:32 2016 +0200

    test1244: test different proxy ports same URL

commit 306192ba55637864e6bf20991cc209c17ff21e55
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 29 16:00:46 2016 +0200

    curl_global_init.3: improved formatting of the flags

commit bbd99a277bf05bd8c1f6fa682e20646f29ac1de4
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 29 15:57:44 2016 +0200

    curl_global_init.3: expand on the SSL and WIN32 bits purpose

    Reported-by: Richard Gray
    Bug: https://curl.haxx.se/mail/lib-2016-06/0136.html

commit 38685f86c8709c0670e81812b98f8181814212bf
Author: Michael Kaufmann <mail@michael-kaufmann.ch>
Date:   Tue Jun 21 22:43:58 2016 +0200

    cleanup: minor code cleanup in Curl_http_readwrite_headers()

    - the expression of an 'if' was always true
    - a 'while' contained a condition that was always true
    - use 'if(k->exp100 > EXP100_SEND_DATA)' instead of 'if(k->exp100)'
    - fixed a typo

    Closes #889

commit b6ddc0ac075ecb7e86b25a26ba2faf7e7880ce13
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 28 15:28:04 2016 +0200

    SFTP: set a generic error when no SFTP one exists...

    ... as otherwise we could get a 0 which would count as no error and we'd
    wrongly continue and could end up segfaulting.

    Bug: https://curl.haxx.se/mail/lib-2016-06/0052.html
    Reported-by: 暖和的和暖

commit 614b5034233b95f7a3bbbbe9b0539180fabd7527
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 28 15:02:46 2016 +0200

    ROADMAP: http2 tests are merged, mention http2 perf

commit c8b2010c5f225ea0c3922ca198dfe1ed9502d591
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 28 14:09:08 2016 +0200

    docs/README.md: to render nicer pages on github

    ... as previously the README.cmake would be picked and put at the bottom
    of the docs page there and it wasn't very representative!

commit bf3222e053d03d044f70af59426db2f278201f2d
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 28 13:58:07 2016 +0200

    README.md: change host name for the svg logo

    rawgit.com asks to use the domain cdn.rawgit.com for production

    See #900

commit 9305b1cf072990efd259d5fe71581473436afbf1
Author: Viktor Szakats <vszakats@users.noreply.github.com>
Date:   Tue Jun 28 13:00:05 2016 +0200

    README.md: use the SVG logo

commit f4955a05537b9f772f0f32aba54326e72f111875
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 28 10:41:22 2016 +0200

    README.md: logo on top!

commit a69f27ae91b791360f4a77b7b82e2e88ec097b08
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 28 08:24:16 2016 +0200

    KNOWN_BUGS: 3.4 POP3 expects "CRLF.CRLF" eob for some

    Closes #740

commit 91792d83b7ca401372854c58d32e0df2f4eb91a0
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Mon Jun 27 17:06:52 2016 +0200

    RELEASE-NOTES: synced with d61c80515aa8

commit d61c80515aa8e4086863fcc0a9693d50d309fc50
Author: Michael Osipov <1983-01-06@gmx.net>
Date:   Fri Jun 24 15:17:53 2016 +0200

    acinclude.m4: improve autodetection of CA bundle on FreeBSD

    The FreeBSD Port security/ca_root_nss installs the Mozilla NSS CA bundle
    to /usr/local/share/certs/ca-root-nss.crt. Use this bundle in the
    discovery process.

    This change also removes the former FreeBSD path that has been obsolete
    for 8 years since this FreeBSD ports commit:
    https://svnweb.freebsd.org/ports/head/security/?view=revision&revision=215953

    Closes #894

commit 91697d22a83e274378b957ed878e62467634ff98
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 22 14:23:46 2016 +0200

    configure: don't specify .lib for libs on windows

    Another follow up for crypt32.lib linking with winssl

commit 5c24fc7768d758b3803ccdb2ec54c910badea7ad
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 22 13:50:56 2016 +0200

    configure: fix winssl LIBS change typo

    follow-up from 120bf29e

commit b5d1b498fc4f62e8c63480aaf79c32f24223becf
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 22 12:06:47 2016 +0200

    TODO: "TCP Fast Open" is done, add monitor pool connections

commit 120bf29ef2c9dcc56414656d77040c24187b01bc
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 22 11:57:25 2016 +0200

    configure: add crypt32.lib for winssl builds

    Necessary since 6cabd78531f

commit 7530ef5c15f6d90e8a3d043cf59a46225e8ccdd7
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 22 11:07:05 2016 +0200

    Makefile.vc: link with crypt32.lib for winssl builds

    Necessary since 6cabd78531f

    Fixes #853

commit 66c447e51e7c066f2ef425e912cee5157c363d55
Author: Joel Depooter <joel.depooter@safe.com>
Date:   Wed Jun 1 16:29:32 2016 -0700

    VC: Add crypt32.lib to Visual Sudio project template files

    Closes #854

commit 05a69ce32c318109815bbaa9a57700c4594aa267
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 22 10:53:28 2016 +0200

    vc: fix the build for schannel certinfo support

    Broken since 6cabd785, which adds use of the Curl_extract_certinfo
    function from the x509asn1.c file.

commit 80388edefca58f8199cdfde077efb7f6d91e60fa
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 21 19:31:24 2016 +0200

    typedefs: use the full structs in internal code...

    ... and save the typedef'ed names for headers and external APIs.

commit 434f8d0389f2969b393ff81ead713b7600502f27
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 21 15:47:12 2016 +0200

    internals: rename the SessionHandle struct to Curl_easy

commit 9adf3c473a01b289c781aab111f9ad2fc541ed4e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue Jun 21 14:39:33 2016 +0200

    headers: forward declare CURL, CURLM and CURLSH as structs

    Instead of typedef'ing to void, typedef to their corresponding actual
    struct names to allow compilers to type-check.

    Assisted-by: Reinhard Max

commit 04b4ee5498b14d320e3b375c64d0162cc2b53c99
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Sun Jun 12 23:47:12 2016 -0400

    vtls: Only call add/getsession if session id is enabled

    Prior to this change we called Curl_ssl_getsessionid and
    Curl_ssl_addsessionid regardless of whether session ID reusing was
    enabled. According to comments that is in case session ID reuse was
    disabled but then later enabled.

    The old way was not intuitive and probably not something users expected.
    When a user disables session ID caching I'd guess they don't expect the
    session ID to be cached anyway in case the caching is later enabled.

commit 046c2c85c4c365d4ae8a621d7886caf96f51e0e7
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 22 00:37:36 2016 +0200

    curl.1: the used progress meter suffix is k in lower case

    Closes #883

commit 12e21fab26bd83dfa75f009a24380d144ea51857
Author: Sergei Nikulov <sergey.nikulov@gmail.com>
Date:   Thu Jun 16 13:53:50 2016 +0300

    cmake: now using BUILD_TESTING=ON/OFF

    CMake build now using BUILD_TESTING=ON/OFF (default is OFF) to build
    tests and enabling CTest integration. Options BUILD_CURL_TESTS and
    BUILD_DASHBOARD_REPORTS was removed.

    Closes #882

    Reviewed-by: Brad King

commit 0bdec5e01d9914d97bb9ed1301b1590162fe2945
Author: Michael Kaufmann <mail@michael-kaufmann.ch>
Date:   Tue Jun 21 09:47:34 2016 +0200

    cleanup: fix method names in code comments

    Closes #887

commit b2dcf0347f1ee5041cccd64632bb8dd7ccbbae91
Author: Kamil Dudka <kdudka@redhat.com>
Date:   Tue Jun 21 12:40:26 2016 +0200

    curl-compilers.m4: improve detection of GCC's -fvisibility= flag

    Some builds of GCC produce output on both stdout and stderr when --help
    --verbose is used.  The 2>&1 redirection caused them to be arbitrarily
    interleaved with each other because of stream buffering.  Consequently,
    grep failed to match the fvisibility= string in the mixed output, even
    though the string was present in GCC's standard output.

    This led to silently disabling symbol hiding in some builds of curl.

commit 5f2e3b886759e0822ff31c36ef10ca8df59fcf59
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun Jun 19 23:52:01 2016 +0200

    tests: fix the HTTP/2 tests

    The HTTP/2 tests brought with commit bf05606ef1f were using the internal
    name 'http2' for the HTTP/2 server, while in fact that name was already
    used for the second instance of the HTTP server. This made tests using
    the second instance (like test 2050) fail after a HTTP/2 test had run.

    The server is now known as HTTP/2 internally and within the <server>
    section in test cases. 1700, 1701 and 1702 were updated accordingly.

commit bb4e7921e70637a43bb01952888fcb0870fb915f
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun Jun 19 23:21:54 2016 +0200

    openssl: use more 'const' to fix build warnings with 1.1.0 branch

commit 2668d8df9a61eadbb7de44903f05963984507d3d
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Fri Jun 17 10:40:20 2016 +0200

    curl.1: missed 'T' in the progress unit suffixes

commit c9a6ab6d921a02a198a543d5b0650fb0c94fd94d
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Fri Jun 17 00:32:34 2016 +0200

    curl.1: mention the unix for the progress meter

commit 13d633d27492ccd86a3424b34952b0ef8026306e
Author: Patrick Monnerat <patrick.monnerat@dh.com>
Date:   Thu Jun 16 19:05:42 2016 +0200

    os400: add new definitions to ILE/RPG binding.

commit d4643d6e799b088e0a7e9b768facc0d1e1e86257
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Wed Jun 15 15:36:40 2016 +0200

    openssl: fix cert check with non-DNS name fields present

    Regression introduced in 5f5b62635 (released in 7.48.0)

    Reported-by: Fabian Ruff
    Fixes #875

commit b1839f6ed8bc8d9324c1fcf334955ddabf47b936
Author: Dan Fandrich <dan@coneharvesters.com>
Date:   Thu Jun 16 08:44:08 2016 +0200

    axtls: Use Curl_wait_ms instead of the less-portable usleep

commit 52c5e9488c0bebc002d114d747fee697d422d02d
Author: Dan Fandrich <dan@coneharvesters.com>
Date:   Thu Jun 16 08:29:10 2016 +0200

    axtls: Fixed compile after compile 31c521b0

commit 67176e2b840486c58a107ab1178d19cfa65faf0f
Author: Dan Fandrich <dan@coneharvesters.com>
Date:   Wed Jun 15 23:04:48 2016 +0200

    tests: Added HTTP proxy keywords to tests 1141 & 1142

commit b70ca5281d93b621dee700c74740b2621d1e30b4
Author: Sergei Nikulov <sergey.nikulov@gmail.com>
Date:   Tue Jun 14 17:11:48 2016 +0300

    cmake: Fix build with winldap

    Bug: https://github.com/curl/curl/pull/874
    Reported-by: Sergei Nikulov

commit f77dfbc5fbb7a20f8d3ef918df35b68c0b60f1e9
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Sat Jun 11 17:33:16 2016 -0400

    CURLOPT_POSTFIELDS.3: Clarify what happens when set empty

    When CURLOPT_POSTFIELDS is set to an empty string libcurl will send a
    zero-byte POST. Prior to this change it was documented as sending data
    from the read callback.

    This also changes the wording of what happens when empty or NULL so that
    it's hopefully easier to understand for people whose primary language
    isn't English.

    Bug: https://github.com/curl/curl/issues/862
    Reported-by: Askar Safin

commit 929520582cdd3708f845af637757837b1d2a7d16
Author: Michael Wallner <mike@php.net>
Date:   Tue Jun 7 07:51:34 2016 +0200

    curl_multi_socket_action.3: Fix rewording

    - Remove some erroneous text.

    Closes https://github.com/curl/curl/pull/865

commit 608d161b605e4ac0ebdab6c89c64e14423a0457a
Author: Luo Jinghua <sunmoon1997@gmail.com>
Date:   Wed Jun 8 07:23:54 2016 +0800

    resolve: enable protocol family logic for synthesized IPv6

    - Enable protocol family logic for IPv6 resolves even when support
    for synthesized addresses is enabled.

    This is a follow up to the parent commit that added support for
    synthesized IPv6 addresses from IPv4 on iOS/OS X. The protocol family
    logic needed for IPv6 was inadvertently excluded if support for
    synthesized addresses was enabled.

    Bug: https://github.com/curl/curl/issues/863
    Ref: https://github.com/curl/curl/pull/866
    Ref: https://github.com/curl/curl/pull/867

commit 01a49a7626ee4a226cd0b50d70591ab147d60ee0
Author: Luo Jinghua <sunmoon1997@gmail.com>
Date:   Tue Jun 7 18:11:37 2016 +0800

    resolve: add support for IPv6 DNS64/NAT64 Networks on OS X + iOS

    Use getaddrinfo() to resolve the IPv4 address literal on iOS/Mac OS X.
    If the current network interface doesn’t support IPv4, but supports
    IPv6, NAT64, and DNS64.

    Closes #866
    Fixes #863

commit 9b6d3a662ea81ec3bbb12002ca79fd27d750671e
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun Jun 5 11:28:31 2016 +0200

    tests: two more HTTP/2 tests

    1701 and 1702

commit 320905a34589a987a5afe29c84316b1bfbcb8290
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun Jun 5 11:17:29 2016 +0200

    runtests: don't display logs when http2 server fails to start

commit d3b5c153af6998e2fd64bfc2b3033b2b5526a8cf
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Fri Jun 3 23:54:06 2016 +0200

    runtests: make stripfile work on stdout as well

    ... and have test 1700 use that to strip out the nghttpx server: headers

commit bf05606ef1f7a982c821396c3ef9fddeb4a1b011
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Fri Jun 3 23:36:10 2016 +0200

    http2-tests: test1700 is the first real HTTP/2 test

    It requires that 'nghttpx' is in the PATH, and it will run the tests
    using nghttpx as a front-end proxy in front of the standard HTTP/1 test
    server. This uses HTTP/2 over plain TCP.

    If you like me have nghttpx installed in a custom path, you can run test 1700
    like this:

    $ PATH=$PATH:$HOME/build-nghttp2/bin/ ./runtests.pl 1700

commit c53d8a0b41a661251fc08ef696040a77842e2049
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Mon Jun 6 23:23:44 2016 +0200

    RELEASE-NOTES: synced with 34855feeb4c299

commit 34855feeb4c2991f7a158064abef16829bd4425f
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Mon Jun 6 20:53:30 2016 +0100

    schannel: Disable ALPN on Windows < 8.1

    Calling QueryContextAttributes with SECPKG_ATTR_APPLICATION_PROTOCOL
    fails on Windows < 8.1 so we need to disable ALPN on these OS versions.

    Inspiration provide by: Daniel Seither

    Closes #848
    Fixes #840

commit 84a48e5732d9dd0c98fda3597352e4b16f35a7ad
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Sun Jun 5 21:07:03 2016 -0400

    checksrc: Add LoadLibrary to the banned functions list

    LoadLibrary was supplanted by Curl_load_library for security
    reasons in 6df916d.

commit 1aa899ff38548a5d1c196f5c9ad7047f0fae3f5a
Author: Jay Satiro <raysatiro@yahoo.com>
Date:   Sun Jun 5 03:13:32 2016 -0400

    http: Fix HTTP/2 connection reuse

    - Change the parser to not require a minor version for HTTP/2.

    HTTP/2 connection reuse broke when we changed from HTTP/2.0 to HTTP/2
    in 8243a95 because the parser still expected a minor version.

    Bug: https://github.com/curl/curl/issues/855
    Reported-by: Andrew Robbins, Frank Gevaerts

commit 61c92c7850cb83c572827dc348247b8b9b57c25a
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Sat Jun 4 21:52:08 2016 +0100

    connect.c: Fixed compilation warning from commit 332e8d6164

    connect.c:952:5: warning: suggest explicit braces to avoid ambiguous 'else'

commit 332e8d6164bfb33dfae19704ef8c3e851a71b2d3
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Sat Jun 4 20:58:39 2016 +0100

    win32: Used centralised verify windows version function

    Closes #845

commit dde5e430e21605e94b24262deef4800e04fb6ba5
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Sat Jun 4 20:51:32 2016 +0100

    win32: Added verify windows version functionality

commit 6020ce5fa70212f105e74456037a2f5cc66c4e09
Author: Steve Holme <steve_holme@hotmail.com>
Date:   Sat Jun 4 20:06:56 2016 +0100

    win32: Introduced centralised verify windows version function

commit 584d0121c353ed855115c39f6cbc009854018029
Author: Kamil Dudka <kdudka@redhat.com>
Date:   Fri Jun 3 11:26:20 2016 +0200

    tool_urlglob: fix off-by-one error in glob_parse()

    ... causing SIGSEGV while parsing URL with too many globs.
    Minimal example:

    $ curl $(for i in $(seq 101); do printf '{a}'; done)

    Reported-by: Romain Coltel
    Bug: https://bugzilla.redhat.com/1340757

commit 873b4346bafdec388fa4bd61ebdee0161da661a0
Author: Benjamin Kircher <kircher@otris.de>
Date:   Wed Jun 1 19:02:18 2016 +0200

    libcurl-multi.3: fix small typo

    Closes #850

commit 55ab64ed1a0472f70a466d5b53c317992c0640c0
Author: Viktor Szakats <vszakats@users.noreply.github.com>
Date:   Wed Jun 1 10:35:38 2016 +0200

    makefile.m32: add crypt32 for winssl builds

    Dependency added by 6cabd78

    Closes #849

commit 31c521b0470e57125ffcd0f1b0c6edf3b9af96c1
Author: Ivan Avdeev <me@w23.ru>
Date:   Wed Jun 1 09:30:03 2016 +0200

    vtls: fix ssl session cache race condition

    Sessionid cache management is inseparable from managing individual
    session lifetimes. E.g. for reference-counted sessions (like those in
    SChannel and OpenSSL engines) every session addition and removal
    should be accompanied with refcount increment and decrement
    respectively. Failing to do so synchronously leads to a race condition
    that causes symptoms like use-after-free and memory corruption.
    This commit:
     - makes existing session cache locking explicit, thus allowing
       individual engines to manage lock's scope.
     - fixes OpenSSL and SChannel engines by putting refcount management
       inside this lock's scope in relevant places.
     - adds these explicit locking calls to other engines that use
       sessionid cache to accommodate for this change. Note, however,
       that it is unknown whether any of these engines could also have
       this race.

    Bug: https://github.com/curl/curl/issues/815
    Fixes #815
    Closes #847

commit 6cabd78531f80d5c6cd942ed1aa97eaa5ec080df
Author: Andrew Kurushin <ajax16384@gmail.com>
Date:   Wed Jun 1 08:48:30 2016 +0200

    schannel: add CURLOPT_CERTINFO support

    Closes #822

commit c444ace5568cdbd7c4f85fecb3f05680aaa5b96d
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue May 31 23:33:48 2016 +0200

    RELEASE-NOTES: synced with 142ee9fa15002315

commit 142ee9fa1500231557333a70691049166e79854a
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue May 31 19:54:35 2016 +0200

    openssl: rename the private SSL_strerror

    ... to make it not look like an OpenSSL function

commit 7108e53fb58a194df54149e3a52c7df006f24ae7
Author: Michael Kaufmann <mail@michael-kaufmann.ch>
Date:   Tue May 31 16:25:56 2016 +0200

    openssl: Use correct buffer sizes for error messages

    Closes #844

commit 6dbc23cfd86bbf8c1616759068a5909ced3dcc99
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Tue May 31 14:13:33 2016 +0200

    curl: fix -q [regression]

    This broke in 7.49.0 with commit e200034425a7625

    Fixes #842

commit 5409e1d793de755c7433336b80b0c8370a359d45
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Sun May 8 15:11:10 2016 +0200

    URL parser: allow URLs to use one, two or three slashes

    Mostly in order to support broken web sites that redirect to broken URLs
    that are accepted by browsers.

    Browsers are typically even more leniant than this as the WHATWG URL
    spec they should allow an _infinite_ amount. I tested 8000 slashes with
    Firefox and it just worked.

    Added test case 1141, 1142 and 1143 to verify the new parser.

    Closes #791

commit ed8b8f2456fc485fa81fb3d3eaef684121bb1aef
Author: Renaud Lehoux <renaud.lehoux@ercom.fr>
Date:   Mon May 30 17:26:10 2016 +0200

    cmake: Added missing mbedTLS support

    Closes #837

commit 2072b4ae4f337a46283bfcc98a6f42c063d43bdf
Author: Renaud Lehoux <renaud.lehoux@ercom.fr>
Date:   Mon May 30 18:10:23 2016 +0200

    mbedtls: removed unused variables

    Closes #838

commit 071c56139463137a4e32a8d841a70c16f3682bb7
Author: Frank Gevaerts <frank@gevaerts.be>
Date:   Wed May 11 14:23:37 2016 +0200

    http: add CURLINFO_HTTP_VERSION and %{http_version}

    Adds access to the effectively used http version to both libcurl and
    curl.

    Closes #799

commit 4bffaad85f7ba9ba12272a06ce4e4a81a9a3178a
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Mon May 30 22:55:54 2016 +0200

    bump: start the journey toward 7.50.0

commit c9b4e6e85907f1581c8d6e1ab52c7f8b9282f266
Author: Marcel Raad <raad@teamviewer.com>
Date:   Mon May 30 13:26:20 2016 +0200

    openssl: fix build with OPENSSL_NO_COMP

    With OPENSSL_NO_COMP defined, there is no function
    SSL_COMP_free_compression_methods

    Closes #836

commit 9a1593501cb30e36ea7109680cab368f9425000d
Author: Gisle Vanem <gvanem@yahoo.no>
Date:   Mon May 30 11:43:04 2016 +0200

    memdebug: fix MSVC crash with -DMEMDEBUG_LOG_SYNC

    Fixes #828

commit 27c86c887194088551577832d284237678e837b4
Author: Jonathan <vanillajonathan@users.noreply.github.com>
Date:   Mon May 30 10:46:35 2016 +0200

    README.md: polish

    Closes #834

commit 602a6bdf6f378b5f44ba7f5f9c9cf87d52c507bd
Author: Daniel Stenberg <daniel@haxx.se>
Date:   Mon May 30 08:21:16 2016 +0200

    RELEASE-NOTES: fix vuln link

Change-Id: I794e042ee8550487e0d42a4df72c73f2b4f89500
diff --git a/lib/url.c b/lib/url.c
index 2a30266..e547e5c 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -137,12 +137,12 @@
 
 /* Local static prototypes */
 static struct connectdata *
-find_oldest_idle_connection_in_bundle(struct SessionHandle *data,
+find_oldest_idle_connection_in_bundle(struct Curl_easy *data,
                                       struct connectbundle *bundle);
 static void conn_free(struct connectdata *conn);
 static void free_fixed_hostname(struct hostname *host);
 static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
-static CURLcode parse_url_login(struct SessionHandle *data,
+static CURLcode parse_url_login(struct Curl_easy *data,
                                 struct connectdata *conn,
                                 char **userptr, char **passwdptr,
                                 char **optionsptr);
@@ -277,7 +277,7 @@
   PROTOPT_NONE                          /* flags */
 };
 
-void Curl_freeset(struct SessionHandle *data)
+void Curl_freeset(struct Curl_easy *data)
 {
   /* Free all dynamic strings stored in the data->set substructure. */
   enum dupstring i;
@@ -355,7 +355,7 @@
   return result;
 }
 
-CURLcode Curl_dupset(struct SessionHandle *dst, struct SessionHandle *src)
+CURLcode Curl_dupset(struct Curl_easy *dst, struct Curl_easy *src)
 {
   CURLcode result = CURLE_OK;
   enum dupstring i;
@@ -398,7 +398,7 @@
  * when curl_easy_perform() is invoked.
  */
 
-CURLcode Curl_close(struct SessionHandle *data)
+CURLcode Curl_close(struct Curl_easy *data)
 {
   struct Curl_multi *m;
 
@@ -496,8 +496,8 @@
 }
 
 /*
- * Initialize the UserDefined fields within a SessionHandle.
- * This may be safely called on a new or existing SessionHandle.
+ * Initialize the UserDefined fields within a Curl_easy.
+ * This may be safely called on a new or existing Curl_easy.
  */
 CURLcode Curl_init_userdefined(struct UserDefined *set)
 {
@@ -621,16 +621,16 @@
  * @return CURLcode
  */
 
-CURLcode Curl_open(struct SessionHandle **curl)
+CURLcode Curl_open(struct Curl_easy **curl)
 {
   CURLcode result;
-  struct SessionHandle *data;
+  struct Curl_easy *data;
 
   /* Very simple start-up: alloc the struct, init it with zeroes and return */
-  data = calloc(1, sizeof(struct SessionHandle));
+  data = calloc(1, sizeof(struct Curl_easy));
   if(!data) {
     /* this is a very serious error */
-    DEBUGF(fprintf(stderr, "Error: calloc of SessionHandle failed\n"));
+    DEBUGF(fprintf(stderr, "Error: calloc of Curl_easy failed\n"));
     return CURLE_OUT_OF_MEMORY;
   }
 
@@ -684,7 +684,7 @@
   return result;
 }
 
-CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
+CURLcode Curl_setopt(struct Curl_easy *data, CURLoption option,
                      va_list param)
 {
   char *argptr;
@@ -2684,7 +2684,7 @@
 #ifndef USE_NGHTTP2
     return CURLE_NOT_BUILT_IN;
 #else
-    struct SessionHandle *dep = va_arg(param, struct SessionHandle *);
+    struct Curl_easy *dep = va_arg(param, struct Curl_easy *);
     if(dep && GOOD_EASY_HANDLE(dep)) {
       data->set.stream_depends_on = dep;
       data->set.stream_depends_e = (option == CURLOPT_STREAM_DEPENDS_E);
@@ -2812,14 +2812,14 @@
  * primary connection, like when freeing room in the connection cache or
  * killing of a dead old connection.
  *
- * This function MUST NOT reset state in the SessionHandle struct if that
+ * This function MUST NOT reset state in the Curl_easy struct if that
  * isn't strictly bound to the life-time of *this* particular connection.
  *
  */
 
 CURLcode Curl_disconnect(struct connectdata *conn, bool dead_connection)
 {
-  struct SessionHandle *data;
+  struct Curl_easy *data;
   if(!conn)
     return CURLE_OK; /* this is closed and fine already */
   data = conn->data;
@@ -2888,7 +2888,7 @@
  * IsPipeliningPossible() returns TRUE if the options set would allow
  * pipelining/multiplexing and the connection is using a HTTP protocol.
  */
-static bool IsPipeliningPossible(const struct SessionHandle *handle,
+static bool IsPipeliningPossible(const struct Curl_easy *handle,
                                  const struct connectdata *conn)
 {
   /* If a HTTP protocol and pipelining is enabled */
@@ -2909,7 +2909,7 @@
   return FALSE;
 }
 
-int Curl_removeHandleFromPipeline(struct SessionHandle *handle,
+int Curl_removeHandleFromPipeline(struct Curl_easy *handle,
                                   struct curl_llist *pipeline)
 {
   if(pipeline) {
@@ -2935,18 +2935,18 @@
 
   curr = pipeline->head;
   while(curr) {
-    struct SessionHandle *data = (struct SessionHandle *) curr->ptr;
+    struct Curl_easy *data = (struct Curl_easy *) curr->ptr;
     infof(data, "Handle in pipeline: %s\n", data->state.path);
     curr = curr->next;
   }
 }
 #endif
 
-static struct SessionHandle* gethandleathead(struct curl_llist *pipeline)
+static struct Curl_easy* gethandleathead(struct curl_llist *pipeline)
 {
   struct curl_llist_element *curr = pipeline->head;
   if(curr) {
-    return (struct SessionHandle *) curr->ptr;
+    return (struct Curl_easy *) curr->ptr;
   }
 
   return NULL;
@@ -2954,7 +2954,7 @@
 
 /* remove the specified connection from all (possible) pipelines and related
    queues */
-void Curl_getoff_all_pipelines(struct SessionHandle *data,
+void Curl_getoff_all_pipelines(struct Curl_easy *data,
                                struct connectdata *conn)
 {
   bool recv_head = (conn->readchannel_inuse &&
@@ -2978,7 +2978,7 @@
   curr = pipeline->head;
   while(curr) {
     struct curl_llist_element *next = curr->next;
-    struct SessionHandle *data = (struct SessionHandle *) curr->ptr;
+    struct Curl_easy *data = (struct Curl_easy *) curr->ptr;
 
 #ifdef DEBUGBUILD /* debug-only code */
     if(data->magic != CURLEASY_MAGIC_NUMBER) {
@@ -3003,7 +3003,7 @@
  * found.
  */
 struct connectdata *
-Curl_oldest_idle_connection(struct SessionHandle *data)
+Curl_oldest_idle_connection(struct Curl_easy *data)
 {
   struct conncache *bc = data->state.conn_cache;
   struct curl_hash_iterator iter;
@@ -3055,7 +3055,7 @@
  * found.
  */
 static struct connectdata *
-find_oldest_idle_connection_in_bundle(struct SessionHandle *data,
+find_oldest_idle_connection_in_bundle(struct Curl_easy *data,
                                       struct connectbundle *bundle)
 {
   struct curl_llist_element *curr;
@@ -3095,7 +3095,7 @@
  * Returns TRUE if the connection actually was dead and disconnected.
  */
 static bool disconnect_if_dead(struct connectdata *conn,
-                               struct SessionHandle *data)
+                               struct Curl_easy *data)
 {
   size_t pipeLen = conn->send_pipe->size + conn->recv_pipe->size;
   if(!pipeLen && !conn->inuse) {
@@ -3129,7 +3129,7 @@
 static int call_disconnect_if_dead(struct connectdata *conn,
                                       void *param)
 {
-  struct SessionHandle* data = (struct SessionHandle*)param;
+  struct Curl_easy* data = (struct Curl_easy*)param;
   disconnect_if_dead(conn, data);
   return 0; /* continue iteration */
 }
@@ -3139,7 +3139,7 @@
  * closes and removes them.
  * The cleanup is done at most once per second.
  */
-static void prune_dead_connections(struct SessionHandle *data)
+static void prune_dead_connections(struct Curl_easy *data)
 {
   struct timeval now = Curl_tvnow();
   long elapsed = Curl_tvdiff(now, data->state.conn_cache->last_cleanup);
@@ -3171,7 +3171,7 @@
  * the pipelining strategy wants to open a new connection instead of reusing.
  */
 static bool
-ConnectionExists(struct SessionHandle *data,
+ConnectionExists(struct Curl_easy *data,
                  struct connectdata *needle,
                  struct connectdata **usethis,
                  bool *force_reuse,
@@ -3270,8 +3270,8 @@
 
         if(!check->bits.multiplex) {
           /* If not multiplexing, make sure the pipe has only GET requests */
-          struct SessionHandle* sh = gethandleathead(check->send_pipe);
-          struct SessionHandle* rh = gethandleathead(check->recv_pipe);
+          struct Curl_easy* sh = gethandleathead(check->send_pipe);
+          struct Curl_easy* rh = gethandleathead(check->recv_pipe);
           if(sh) {
             if(!IsPipeliningPossible(sh, check))
               continue;
@@ -3756,7 +3756,7 @@
 /*
  * Check if characters in hostname is allowed in Top Level Domain.
  */
-static bool tld_check_name(struct SessionHandle *data,
+static bool tld_check_name(struct Curl_easy *data,
                            const char *ace_hostname)
 {
   size_t err_pos;
@@ -3798,7 +3798,7 @@
 /*
  * Perform any necessary IDN conversion of hostname
  */
-static void fix_hostname(struct SessionHandle *data,
+static void fix_hostname(struct Curl_easy *data,
                          struct connectdata *conn, struct hostname *host)
 {
   size_t len;
@@ -3887,7 +3887,7 @@
 /*
  * Allocate and initialize a new connectdata object.
  */
-static struct connectdata *allocate_conn(struct SessionHandle *data)
+static struct connectdata *allocate_conn(struct Curl_easy *data)
 {
   struct connectdata *conn = calloc(1, sizeof(struct connectdata));
   if(!conn)
@@ -3920,7 +3920,7 @@
   conn->created = Curl_tvnow();
 
   conn->data = data; /* Setup the association between this connection
-                        and the SessionHandle */
+                        and the Curl_easy */
 
   conn->proxytype = data->set.proxytype; /* type */
 
@@ -3992,7 +3992,7 @@
   conn->localport = data->set.localport;
 
   /* the close socket stuff needs to be copied to the connection struct as
-     it may live on without (this specific) SessionHandle */
+     it may live on without (this specific) Curl_easy */
   conn->fclosesocket = data->set.fclosesocket;
   conn->closesocket_client = data->set.closesocket_client;
 
@@ -4011,7 +4011,7 @@
   return NULL;
 }
 
-static CURLcode findprotocol(struct SessionHandle *data,
+static CURLcode findprotocol(struct Curl_easy *data,
                              struct connectdata *conn,
                              const char *protostr)
 {
@@ -4056,7 +4056,7 @@
 /*
  * Parse URL and fill in the relevant members of the connection struct.
  */
-static CURLcode parseurlandfillconn(struct SessionHandle *data,
+static CURLcode parseurlandfillconn(struct Curl_easy *data,
                                     struct connectdata *conn,
                                     bool *prot_missing,
                                     char **userp, char **passwdp,
@@ -4141,12 +4141,17 @@
   }
   else {
     /* clear path */
+    char slashbuf[4];
     path[0]=0;
 
-    if(2 > sscanf(data->change.url,
-                   "%15[^\n:]://%[^\n/?]%[^\n]",
-                   protobuf,
-                   conn->host.name, path)) {
+    rc = sscanf(data->change.url,
+                "%15[^\n:]:%3[/]%[^\n/?]%[^\n]",
+                protobuf, slashbuf, conn->host.name, path);
+    if(2 == rc) {
+      failf(data, "Bad URL");
+      return CURLE_URL_MALFORMAT;
+    }
+    if(3 > rc) {
 
       /*
        * The URL was badly formatted, let's try the browser-style _without_
@@ -4197,8 +4202,23 @@
 
       *prot_missing = TRUE; /* not given in URL */
     }
-    else
+    else {
+      size_t s = strlen(slashbuf);
       protop = protobuf;
+      if(s != 2) {
+        infof(data, "Unwillingly accepted illegal URL using %d slash%s!\n",
+              s, s>1?"es":"");
+
+        if(data->change.url_alloc)
+          free(data->change.url);
+        /* repair the URL to use two slashes */
+        data->change.url = aprintf("%s://%s%s",
+                                   protobuf, conn->host.name, path);
+        if(!data->change.url)
+          return CURLE_OUT_OF_MEMORY;
+        data->change.url_alloc = TRUE;
+      }
+    }
   }
 
   /* We search for '?' in the host name (but only on the right side of a
@@ -4404,7 +4424,7 @@
  * If we're doing a resumed transfer, we need to setup our stuff
  * properly.
  */
-static CURLcode setup_range(struct SessionHandle *data)
+static CURLcode setup_range(struct Curl_easy *data)
 {
   struct UrlState *s = &data->state;
   s->resume_from = data->set.set_resume_from;
@@ -4436,7 +4456,7 @@
  * setup_connection_internals() -
  *
  * Setup connection internals specific to the requested protocol in the
- * SessionHandle. This is inited and setup before the connection is made but
+ * Curl_easy. This is inited and setup before the connection is made but
  * is about the particular protocol that is to be used.
  *
  * This MUST get called after proxy magic has been figured out.
@@ -4445,7 +4465,7 @@
 {
   const struct Curl_handler * p;
   CURLcode result;
-  struct SessionHandle *data = conn->data;
+  struct Curl_easy *data = conn->data;
 
   /* in some case in the multi state-machine, we go back to the CONNECT state
      and then a second (or third or...) call to this function will be made
@@ -4481,10 +4501,10 @@
 
 /*
  * Curl_free_request_state() should free temp data that was allocated in the
- * SessionHandle for this single request.
+ * Curl_easy for this single request.
  */
 
-void Curl_free_request_state(struct SessionHandle *data)
+void Curl_free_request_state(struct Curl_easy *data)
 {
   Curl_safefree(data->req.protop);
   Curl_safefree(data->req.newurl);
@@ -4658,7 +4678,7 @@
  * host name, so that we can re-use an existing connection
  * that may exist registered to the same proxy host.
  */
-static CURLcode parse_proxy(struct SessionHandle *data,
+static CURLcode parse_proxy(struct Curl_easy *data,
                             struct connectdata *conn, char *proxy)
 {
   char *prox_portno;
@@ -4821,7 +4841,7 @@
 /*
  * Extract the user and password from the authentication string
  */
-static CURLcode parse_proxy_auth(struct SessionHandle *data,
+static CURLcode parse_proxy_auth(struct Curl_easy *data,
                                  struct connectdata *conn)
 {
   char proxyuser[MAX_CURL_USER_LENGTH]="";
@@ -4866,7 +4886,7 @@
  *          options                 - non-zero length if defined
  *          conn->host.name         - remove user name and password
  */
-static CURLcode parse_url_login(struct SessionHandle *data,
+static CURLcode parse_url_login(struct Curl_easy *data,
                                 struct connectdata *conn,
                                 char **user, char **passwd, char **options)
 {
@@ -5105,7 +5125,7 @@
  *
  * The port number embedded in the URL is replaced, if necessary.
  *************************************************************/
-static CURLcode parse_remote_port(struct SessionHandle *data,
+static CURLcode parse_remote_port(struct Curl_easy *data,
                                   struct connectdata *conn)
 {
   char *portptr;
@@ -5217,7 +5237,7 @@
  * Override the login details from the URL with that in the CURLOPT_USERPWD
  * option or a .netrc file, if applicable.
  */
-static CURLcode override_login(struct SessionHandle *data,
+static CURLcode override_login(struct Curl_easy *data,
                                struct connectdata *conn,
                                char **userp, char **passwdp, char **optionsp)
 {
@@ -5320,7 +5340,7 @@
  * The hostname and the port may be empty; in this case, NULL is returned for
  * the hostname and -1 for the port.
  */
-static CURLcode parse_connect_to_host_port(struct SessionHandle *data,
+static CURLcode parse_connect_to_host_port(struct Curl_easy *data,
                                            const char *host,
                                            char **hostname_result,
                                            int *port_result)
@@ -5411,7 +5431,7 @@
  * Parses one "connect to" string in the form:
  * "HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT".
  */
-static CURLcode parse_connect_to_string(struct SessionHandle *data,
+static CURLcode parse_connect_to_string(struct Curl_easy *data,
                                         struct connectdata *conn,
                                         const char *conn_to_host,
                                         char **host_result,
@@ -5477,7 +5497,7 @@
  * Processes all strings in the "connect to" slist, and uses the "connect
  * to host" and "connect to port" of the first string that matches.
  */
-static CURLcode parse_connect_to_slist(struct SessionHandle *data,
+static CURLcode parse_connect_to_slist(struct Curl_easy *data,
                                        struct connectdata *conn,
                                        struct curl_slist *conn_to_host)
 {
@@ -5526,7 +5546,7 @@
 /*************************************************************
  * Resolve the address of the server or proxy
  *************************************************************/
-static CURLcode resolve_server(struct SessionHandle *data,
+static CURLcode resolve_server(struct Curl_easy *data,
                                struct connectdata *conn,
                                bool *async)
 {
@@ -5721,7 +5741,7 @@
  * *NOTE* this function assigns the conn->data pointer!
  */
 
-static CURLcode create_conn(struct SessionHandle *data,
+static CURLcode create_conn(struct Curl_easy *data,
                             struct connectdata **in_connect,
                             bool *async)
 {
@@ -6093,7 +6113,7 @@
      strings in the session handle strings array!
 
      Keep in mind that the pointers in the master copy are pointing to strings
-     that will be freed as part of the SessionHandle struct, but all cloned
+     that will be freed as part of the Curl_easy struct, but all cloned
      copies will be separately allocated.
   */
   data->set.ssl.CApath = data->set.str[STRING_SSL_CAPATH];
@@ -6103,6 +6123,7 @@
   data->set.ssl.random_file = data->set.str[STRING_SSL_RANDOM_FILE];
   data->set.ssl.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
   data->set.ssl.cipher_list = data->set.str[STRING_SSL_CIPHER_LIST];
+  data->set.ssl.clientcert = data->set.str[STRING_CERT];
 #ifdef USE_TLS_SRP
   data->set.ssl.username = data->set.str[STRING_TLSAUTH_USERNAME];
   data->set.ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD];
@@ -6312,7 +6333,7 @@
                          bool *protocol_done)
 {
   CURLcode result = CURLE_OK;
-  struct SessionHandle *data = conn->data;
+  struct Curl_easy *data = conn->data;
 
   Curl_pgrsTime(data, TIMER_NAMELOOKUP);
 
@@ -6386,7 +6407,7 @@
   return result;
 }
 
-CURLcode Curl_connect(struct SessionHandle *data,
+CURLcode Curl_connect(struct Curl_easy *data,
                       struct connectdata **in_connect,
                       bool *asyncp,
                       bool *protocol_done)
@@ -6429,14 +6450,14 @@
 /*
  * Curl_init_do() inits the readwrite session. This is inited each time (in
  * the DO function before the protocol-specific DO functions are invoked) for
- * a transfer, sometimes multiple times on the same SessionHandle. Make sure
+ * a transfer, sometimes multiple times on the same Curl_easy. Make sure
  * nothing in here depends on stuff that are setup dynamically for the
  * transfer.
  *
  * Allow this function to get called with 'conn' set to NULL.
  */
 
-CURLcode Curl_init_do(struct SessionHandle *data, struct connectdata *conn)
+CURLcode Curl_init_do(struct Curl_easy *data, struct connectdata *conn)
 {
   struct SingleRequest *k = &data->req;