                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                                  Changelog

Version 7.69.1 (11 Mar 2020)

Daniel Stenberg (11 Mar 2020)
- RELEASE-NOTES: 7.69.1

- THANKS: from the 7.69.1 release

- [Marc Hoersken brought this change]

  test1129: fix invalid case of closing XML-tag and Content-Length
  
  Fixes #5070
  Closes #5072

Marc Hoersken (10 Mar 2020)
- tests/data: fix static ip instead of dynamic value being used
  
  Follow up to 94ced8e

- tests/data: fix static ip:port instead of dynamic values being used
  
  Closes #5065

- tests/server: fix missing use of exe_ext helper function
  
  Follow up to 9819984 and 3dce984
  Reviewed-By: Daniel Stenberg
  Closes #5064

- runtests: log minimal and maximal used port numbers

Daniel Stenberg (9 Mar 2020)
- [Jim Fuller brought this change]

  sftp: fix segfault regression introduced by #4747
  
  This fix adds a defensive check for the case where the char *name in
  struct libssh2_knownhost is NULL
  
  Fixes #5041
  Closes #5062

- RELEASE-NOTES: synced

- socks4: fix host resolve regression
  
  1. The socks4 state machine was broken in the host resolving phase
  
  2. The code now insists on IPv4-only when using SOCKS4 as the protocol
  only supports that.
  
  Regression from #4907 and 4a4b63d, shipped in 7.69.0
  
  Reported-by: amishmm on github
  Bug: https://github.com/curl/curl/issues/5053#issuecomment-596191594
  Closes #5061

- [Patrick Monnerat brought this change]

  silly web server: silent a compilation warning
  
  Recent gcc warns when byte count of strncpy() equals the destination
  buffer size. Since the destination buffer is previously cleared and
  the source string is always shorter, reducing the byte count by one
  silents the warning without affecting the result.
  
  Closes #5059

- [Patrick Monnerat brought this change]

  cookie: get_top_domain() sets zero length for null domains
  
  This silents a compilation warning with gcc -O3.

- [Patrick Monnerat brought this change]

  test 1560: avoid valgrind false positives
  
  When using maximum code optimization level (-O3), valgrind wrongly
  detects uses of uninitialized values in strcmp().
  
  Preset buffers with all zeroes to avoid that.

Steve Holme (8 Mar 2020)
- sha256: Added WinCrypt implementation
  
  Closed #5030

- sha256: Added SecureTransport implementation

Daniel Stenberg (7 Mar 2020)
- lib1564: reduce number of mid-wait wakeup calls
  
  This test does A LOT of *wakeup() calls and then calls curl_multi_poll()
  twice. The first *poll() is then expected to return early and the second
  not - as the first is supposed to drain the socketpair pipe.
  
  It turns out however that when given "excessive" amounts of writes to
  the pipe, some operating systems (the Solaris based are known) will
  return EAGAIN before the pipe is drained, which in our test case causes
  the second *poll() call to also abort early.
  
  This change attempts to avoid the OS-specific behaviors in the test by
  reducing the amount of wakeup calls from 1234567 to 10.
  
  Reported-by: Andy Fiddaman
  Fixes #5037
  Closes #5058

- [Patrick Monnerat brought this change]

  mime: fix the binary encoder to handle large data properly
  
  New test 666 checks this is effective.
  As upload buffer size is significant in this kind of tests, shorten it
  in similar test 652.
  
  Fixes #4860
  Closes #4833
  Reported-by: RuurdBeerstra on github

- [Patrick Monnerat brought this change]

  mime: do not perform more than one read in a row
  
  Input buffer filling may delay the data sending if data reads are slow.
  To overcome this problem, file and callback data reads do not accumulate
  in buffer anymore. All other data (memory data and mime framing) are
  considered as fast and still concatenated in buffer.
  As this may highly impact performance in terms of data overhead, an early
  end of part data check is added to spare a read call.
  When encoding a part's data, an encoder may require more bytes than made
  available by a single read. In this case, the above rule does not apply
  and reads are performed until the encoder is able to deliver some data.
  
  Tests 643, 644, 645, 650 and 654 have been adapted to the output data
  changes, with test data size reduced to avoid the boredom of long lists of
  1-byte chunks in verification data.
  New test 667 checks mimepost using single-byte read callback with encoder.
  New test 668 checks the end of part data early detection.
  
  Fixes #4826
  Reported-by: MrdUkk on github

- [Patrick Monnerat brought this change]

  mime: latch last read callback status.
  
  In case a read callback returns a status (pause, abort, eof,
  error) instead of a byte count, drain the bytes read so far but
  remember this status for further processing.
  Takes care of not losing data when pausing, and properly resume a
  paused mime structure when requested.
  New tests 670-673 check unpausing cases, with easy or multi
  interface and mime or form api.
  
  Fixes #4813
  Reported-by: MrdUkk on github

Marc Hoersken (7 Mar 2020)
- runtests: fix missing use of exe_ext helper function

Daniel Stenberg (7 Mar 2020)
- [Ernst Sjöstrand brought this change]

  ares: store dns parameters for duphandle
  
  With c-ares the dns parameters lives in ares_channel. Store them in the
  curl handle and set them again in easy_duphandle.
  
  Regression introduced in #3228 (6765e6d), shipped in curl 7.63.0.
  
  Fixes #4893
  Closes #5020
  Signed-off-by: Ernst Sjöstrand <ernst.sjostrand@verisure.com>

- version: make curl_version* thread-safe without using global context
  
  Closes #5010

- RELEASE-NOTES: synced

Marc Hoersken (7 Mar 2020)
- tests: use native Sleep function as fallback on Windows
  
  Reviewed-By: Daniel Stenberg
  Closes #5054

- perl: align order and completeness of Windows OS checks

Daniel Stenberg (7 Mar 2020)
- tool_cb_see: set correct copyright year range
  
  Follow-up to a39e5bfb9

Marc Hoersken (7 Mar 2020)
- seek: fix fallback for missing ftruncate on Windows
  
  This fixes test 198 on versions of MinGW-w64 without ftruncate
  
  Reviewed-By: Daniel Stenberg
  Reviewed-By: Marcel Raad
  Closes #5055

- config-win32: Windows does not have ftruncate

Daniel Stenberg (7 Mar 2020)
- pause: force a connection (re-)check after unpausing
  
  There might be data available that was already read off the socket, for
  example in the TLS layer.
  
  Reported-by: Anders Berg
  Fixes #4966
  Closes #5049

- socks5: switch state properly when the resolve is done
  
  Regression from 4a4b63d (and #4907)
  Reported-by: vitaha85 on github
  Fixes #5053
  Closes #5056

Jay Satiro (7 Mar 2020)
- libssh: Fix matching user-specified MD5 hex key
  
  Prior to this change a match would never be successful because it
  was mistakenly coded to compare binary data from libssh to a
  user-specified hex string (ie CURLOPT_SSH_HOST_PUBLIC_KEY_MD5).
  
  Reported-by: fds242@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4971
  Closes https://github.com/curl/curl/pull/4974

Daniel Stenberg (6 Mar 2020)
- pause: bail out on bad input
  
  A NULL easy handle or an easy handle without an associated connection
  cannot be paused or unpaused.
  
  Closes #5050

Steve Holme (6 Mar 2020)
- unit1612: fixed the inclusion and compilation of the HMAC unit test
  
  Follow up to 3f74e5e6 to fix:
  
  - A typo in Makefile.inc where unit1611 was used instead
  - Some compilation issues in unit1612.c
  
  Closes #5024

Daniel Stenberg (6 Mar 2020)
- pause: return early for calls that don't change pause state
  
  Reviewed-by: Patrick Monnerat
  Ref: #4833
  Closes #5026

Jay Satiro (6 Mar 2020)
- curl_share_setopt.3: Note sharing cookies doesn't enable the engine
  
  Follow-up to d0a7ee3 which fixed a bug in 7.66.0 that caused
  CURL_LOCK_DATA_COOKIE to enable the easy handle's cookie engine.
  
  Bug: https://curl.haxx.se/mail/lib-2020-03/0019.html
  Reported-by: Felipe Gasper
  
  Closes https://github.com/curl/curl/pull/5048

- multi: skip EINTR check on wakeup socket if it was closed
  
  - Don't check errno on wakeup socket if sread returned 0 since sread
    doesn't set errno in that case.
  
  This is a follow-up to cf7760a from several days ago which fixed
  Curl_multi_wait to stop busy looping sread on the non-blocking wakeup
  socket if it was closed (ie sread returns 0). Due to a logic error it
  was still possible to busy loop in that case if errno == EINTR.
  
  Closes https://github.com/curl/curl/pull/5047

Daniel Stenberg (6 Mar 2020)
- transfer: set correct copyright year range

- urldata: remove the 'stream_was_rewound' connectdata struct member
  
  ... as it is never set anywhere.
  
  Follow-up to 2f44e94ef
  Closes #5046

- Revert "pause: force-drain the transfer on unpause"
  
  This reverts commit fa0216b294af4c7113a9040ca65eefc7fc18ac1c (from #5000)
  
  Clearly that didn't solve the problem correctly.
  
  Reported-by: Christopher Reid
  Reopens #4966
  Fixes #5044

- RELEASE-NOTES: synced
  
  and bumped curlver.h

- MANUAL: update a dict-using command line
  
  The 'web1913' database is now invalid, use 'gcide' instead.

- KNOWN_BUGS: configure --with-gssapi with Heimdal is ignored on macOS
  
  Closes #3841

- polarssl: remove more references and mentions
  
  Assisted-by: Jay Satiro
  Follow-up to 6357a19ff29dac04
  Closes #5036

Marc Hoersken (4 Mar 2020)
- tests: wrap ignored test failures in braces

- tests: align some Windows sleep defines with each other

- tests: try to make sleeping portable by avoiding select
  
  select does not support just waiting on Windows:
  https://perldoc.perl.org/perlport.html#select
  
  Reviewed-By: Daniel Stenberg
  Closes #5035

Daniel Stenberg (4 Mar 2020)
- runtests.1: rephrase how to specify what tests to run
  
  Also mention the new tilde-prefixed way to ignore test results.
  
  Reviewed-By: Marc Hoersken
  Closes #5033

- cirrus-ci: disable the FreeBSD 13 builds
  
  FreeBSD 13.0 is apparently close to a year away from a stable release
  and has proven to cause intermittent builds failures recently.
  
  Assisted-by: Dan Fandrich
  Assisted-by: Fedor Korotkov
  Fixes #5028
  Closes #5029

Version 7.69.0 (4 Mar 2020)

Daniel Stenberg (4 Mar 2020)
- RELEASE-NOTES: 7.69.0

- THANKS: from 7.69.0
  
  Now sorted case insensitive

Marc Hoersken (3 Mar 2020)
- ci/tests: fix escaping of testnames and disable proxy for CI APIs
  
  Follow up to ada581f and c0d8b96
  Closes #5031

Jay Satiro (3 Mar 2020)
- cmake: Show HTTPS-proxy in the features output
  
  - Show HTTPS-proxy in the features output for those backends that
    support it: OpenSSL, GnuTLS and NSS.
  
  Prior to this change HTTPS-proxy was missing from the cmake features
  output even if curl was built with it. Only cmake output was affected.
  Both the library and tool correctly reported the feature.
  
  Bug: https://curl.haxx.se/mail/lib-2020-03/0008.html
  Reported-by: David Lopes
  
  Closes https://github.com/curl/curl/pull/5025

Marc Hoersken (3 Mar 2020)
- ci/tests: Make it possible to still run but ignore failing tests
  
  This enables the development of a solution for the failing tests by
  running them on CI while ignoring their result for the overall status.
  
  Closes #4994

- README.md: add Azure DevOps Pipelines build status badge

- ci/tests: Move CI test result creation above environment setup
  
  This avoids using our test servers as proxy to the AppVeyor API.
  
  Closes #5022

- ci/tests: Send test results to AppVeyor for status overview
  
  Closes #5021

Daniel Stenberg (3 Mar 2020)
- Revert "sha256: Added SecureTransport implementation"
  
  This reverts commit 4feb38deed33fed14ff7c370a6a9153c661dbb9c (from #4956)
  
  That commit broke test 1610 on macos builds without TLS.
  
  Closes #5027

- dist: include tests/azure.pm in the tarball
  
  Bug: https://github.com/curl/curl/commit/ada581f2cc32f48c1629b729707ac19208435b27#commitcomment-37601589
  Reported-by: Marcel Raad

Steve Holme (3 Mar 2020)
- configure.ac: Disable metalink if mbedTLS is specified
  
  Follow up to cdcc9df1 and #5006. Even though I mentioned mbedTLS as
  being one of the backends that metalink needs to be disabled for, I
  seem to have included it in the list of allowed SSL/TLS backends in
  comnfigure.ac :(
  
  Closes #5013

- sha256: Tidy up following recent changes
  
  Reviewed-by: Daniel Stenberg
  Closes #4956

- sha256: Added WinCrypt implementation

- sha256: Added SecureTransport implementation

- sha256: Added mbedtls implementation

- sha256: Added GNU TLS gcrypt implementation

- sha256: Added GNU TLS Nettle implementation

Jay Satiro (2 Mar 2020)
- curl_escape.3: Add a link to curl_free
  
  Ref: https://github.com/curl/curl/pull/5016#issuecomment-593628582

- curl_getenv.3: Fix the memory handling description
  
  - Tell the user to call curl_free() to free the pointer returned by
    curl_getenv().
  
  Prior to this change the user was directed to call free(), but that
  would not work in cases where the library and application use separate C
  runtimes and therefore have separate heap memory management.
  
  Closes https://github.com/curl/curl/pull/5016

Daniel Stenberg (2 Mar 2020)
- [Nick Zitzmann brought this change]

  md4: use init/update/final functions in Secure Transport
  
  We can use CC_MD4_Init/Update/Final without having to allocate memory
  directly.
  
  Closes #4979

Marc Hoersken (2 Mar 2020)
- ci/tests: some MacOS builds randomly take longer than 20min

Daniel Stenberg (2 Mar 2020)
- multi_wait: stop loop when sread() returns zero
  
  It's unclear why it would ever return zero here, but this change fixes
  Robert's problem and it shouldn't loop forever...
  
  Reported-by: Robert Dunaj
  Bug: https://curl.haxx.se/mail/archive-2020-02/0011.html
  Closes #5019

- http: mark POSTs with no body as "upload done" from the start
  
  As we have logic that checks if we get a >= 400 reponse code back before
  the upload is done, which then got confused since it wasn't "done" but
  yet there was no data to send!
  
  Reported-by: IvanoG on github
  Fixes #4996
  Closes #5002

- tests: disable 962, 963 and 964 on Windows
  
  These tests are also doing UTF-8 SMTP.
  
  Follow-up to df207d2dd93b9e73

Marc Hoersken (2 Mar 2020)
- ci/tests: fine-tune Azure Pipeline timeouts with a small puffer

Daniel Stenberg (2 Mar 2020)
- configure: bump the AC_COPYRIGHT year range

- [Steve Holme brought this change]

  tests: disable SMTP UTF-8 tests on Windows
  
  Fixes #4988
  Closes #4992

- formdata/mime: copyright year range update
  
  Due to the merge/revert cycle

- Revert "mime: latch last read callback status."
  
  This reverts commit 87869e38d7afdec3ef1bb4965711458b088e254f.
  
  Fixes #5014
  Closes #5015
  Reopens #4833

- Revert "mime: do not perform more than one read in a row"
  
  This reverts commit ed0f357f7d25566110d4302f33759f4ffb5a6f83.

- Revert "mime: fix the binary encoder to handle large data properly"
  
  This reverts commit b2caaa0681f329eed317ffb6ae6927f4a539f0c1.

- altsvc: both h3 backends now speak h3-27
  
  ... also updated the HTTP3 build description for ngtcp2 accordingly.

- [Patrick Monnerat brought this change]

  mime: fix the binary encoder to handle large data properly
  
  New test 666 checks this is effective.
  As upload buffer size is significant in this kind of tests, shorten it
  in similar test 652.
  
  Fixes #4860
  Reported-by: RuurdBeerstra on github

- [Patrick Monnerat brought this change]

  mime: do not perform more than one read in a row
  
  Input buffer filling may delay the data sending if data reads are slow.
  To overcome this problem, file and callback data reads do not accumulate
  in buffer anymore. All other data (memory data and mime framing) are
  considered as fast and still concatenated in buffer.
  As this may highly impact performance in terms of data overhead, an early
  end of part data check is added to spare a read call.
  When encoding a part's data, an encoder may require more bytes than made
  available by a single read. In this case, the above rule does not apply
  and reads are performed until the encoder is able to deliver some data.
  
  Tests 643, 644, 645, 650 and 654 have been adapted to the output data
  changes, with test data size reduced to avoid the boredom of long lists of
  1-byte chunks in verification data.
  New test 664 checks mimepost using single-byte read callback with encoder.
  New test 665 checks the end of part data early detection.
  
  Fixes #4826
  Reported-by: MrdUkk on github

- [Patrick Monnerat brought this change]

  mime: latch last read callback status.
  
  In case a read callback returns a status (pause, abort, eof,
  error) instead of a byte count, drain the bytes read so far but
  remember this status for further processing.
  Takes care of not losing data when pausing, and properly resume a
  paused mime structure when requested.
  New tests 670-673 check unpausing cases, with easy or multi
  interface and mime or form api.
  
  Fixes #4813
  Reported-by: MrdUkk on github
  Closes #4833

Steve Holme (1 Mar 2020)
- unit1651: Fixed conversion compilation warning
  
  371:17: warning: conversion to 'unsigned char' from 'int' may alter its
          value [-Wconversion]
  
  Closes #5008

- configure.ac: Disable metalink support if an incompatible SSL/TLS specified
  
  tool_metalink only supports cryptography from OpenSSL, GnuTLS, NSS,
  The Win32 Crypto library and Apple's Common Crypto library.
  
  If an TLS backend such as mbedTLS or WolfSSL is specified then the
  following error is given during compilation along, with a load of
  unresolved extern errors:
  
  Can't compile METALINK support without a crypto library.
  
  Reviewed-by: Daniel Stenberg
  Closes #5006

Marc Hoersken (1 Mar 2020)
- ci/tests: Update Azure DevOps pipeline job display names
  
  Make the configure step more descriptive and align others.

- ci/tests: Fix typo in previous commit 597cf2

- ci/tests: Make sure that the AZURE_ACCESS_TOKEN is available
  
  For security reasons the access token is not available to PR builds.
  Therefore we should not try to use the DevOps API with an empty token.

Daniel Stenberg (1 Mar 2020)
- build: remove all HAVE_OPENSSL_ENGINE_H defines
  
  ... as there's nothing in the code that actually uses the define! The
  last reference was removed in 38203f158.
  
  Closes #5007

Jay Satiro (29 Feb 2020)
- [Rolf Eike Beer brought this change]

  CMake: clean up and improve build procedures
  
  - remove check for unsupported old CMake versions
  
  - do not link to c-ares library twice
  
  - modernize custom Find modules
  
      - FindLibSSH2:
          - pass version to FPHSA to show it in the output
          - use LIBSSH2_VERSION define to extract the version number in
            one shot. This variable exists in the header for 10 years.
          - remove unneeded code
  
      - FindNGHTTP2.cmake:
          - drop needless FPHSA argument
          - mark found variables as advanced
  
      - FindNSS.cmake:
          - show version number
  
      - FindCARES.cmake:
          - drop default paths
          - use FPHSA instead of checking things by hand
  
  - remove needless explict variable dereference
  
  - simplify count_true()
  
  - allow all policies up to version 3.16 to be set to NEW
  
  - do not rerun check for -Wstrict-aliasing=3 every time
  
  In contrast to every other compiler flag this has a = in it, which CMake
  can't have in a variable name.
  
  - only read the interesting strings from curlver.h
  
  Reviewed-by: Peter Wu
  
  Closes https://github.com/curl/curl/pull/4975

- runtests: fix output to command log
  
  - Record only the command of the most recently ran test in the command
    log.
  
  This is a follow-up to 02988b7 from several weeks ago which fixed
  writing to the command log, however it saved all commands for all tests
  instead of just the most recently ran test as we would now expect.
  
  Fixes https://github.com/curl/curl/commit/02988b7#commitcomment-37546876
  Closes https://github.com/curl/curl/pull/5001

Steve Holme (1 Mar 2020)
- polarssl: Additional removal
  
  Follow up to 6357a19f.
  
  Reviewed-by: Daniel Stenberg
  Closes #5004

- [Jonathan Cardoso Machado brought this change]

  docs: fix typo on CURLINFO_RETRY_AFTER - alwaus -> always
  
  Reviewed-by: Steve Holme
  Closes #5005

- md5: Added implementation for mbedTLS
  
  Reviewed-by: Jay Satiro
  Closes #4980

- md5: Use pointer notation for array parameters in GnuTLS implementation

- md4: Use non-deprecated functions in mbedTLS >= 2.7.0
  
  Closes #4983

Marc Hoersken (29 Feb 2020)
- ci/tests: Send test results to Azure DevOps for reporting

Daniel Stenberg (29 Feb 2020)
- pause: force-drain the transfer on unpause
  
  ... since the socket might not actually be readable anymore when for
  example the data is already buffered in the TLS layer.
  
  Fixes #4966
  Reported-by: Anders Berg
  Closes #5000

- TODO: curl --proxycommand
  
  Suggested-by: Kristian Mide
  Closes #4941

- smtp: overwriting 'from' leaks memory
  
  Detected by Coverity. CID 1418139.
  
  Also, make sure to return error if the new 'from' allocation fails.
  
  Closes #4997

- CIfuzz: switch off 'dry_run' mode
  
  Follow-up from #4960: now make it fail if it detects problems.
  
  Closes #4998

Marc Hoersken (28 Feb 2020)
- ci/tests: Increase timeouts of Windows builds due to new tests
  
  Recently added tests increased their runtime above the limit of 60min.

- ci/tests: align Azure Pipeline job names with each other

- ci/tests: Add Windows builds via Azure Pipelines using Docker

- tests: fix Python 3 compatibility of smbserver.py

Daniel Stenberg (27 Feb 2020)
- runtests: restore the command log
  
  The log file with all command lines for the invoked command lines is now
  called logs/commands.log
  
  Fixes #4911
  Closes #4989

- smtp: fix memory leak on exit path
  
  Detected by Coverity. CID 1418139. "leaked_storage: Variable 'from'
  going out of scope leaks the storage it points to"
  
  Closes #4990

Steve Holme (27 Feb 2020)
- gtls: Fixed compilation when using GnuTLS < 3.5.0
  
  Reverts the functionality from 41fcb4f when compiling with GnuTLS older
  than 3.5.0.
  
  Reviewed-by: Daniel Stenberg
  Closes #4984

- RELEASE-NOTES: Corrected the link to issue #4892

Daniel Stenberg (27 Feb 2020)
- Curl_is_ASCII_name: handle a NULL argument
  
  Make the function tolerate a NULL pointer input to avoid dereferencing
  that pointer.
  
  Follow-up to efce3ea5a85126d
  Detected by OSS-Fuzz
  Reviewed-By: Steve Holme
  Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=20907
  Fixes #4985
  Closes #4986

- RELEASE-NOTES: synced

- http2: make pausing/unpausing set/clear local stream window
  
  This reduces the HTTP/2 window size to 32 MB since libcurl might have to
  buffer up to this amount of data in memory and yet we don't want it set
  lower to potentially impact tranfer performance on high speed networks.
  
  Requires nghttp2 commit b3f85e2daa629
  (https://github.com/nghttp2/nghttp2/pull/1444) to work properly, to end
  up in the next release after 1.40.0.
  
  Fixes #4939
  Closes #4940

- [Anderson Toshiyuki Sasaki brought this change]

  libssh: improve known hosts handling
  
  Previously, it was not possible to get a known hosts file entry due to
  the lack of an API.  ssh_session_get_known_hosts_entry(), introduced in
  libssh-0.9.0, allows libcurl to obtain such information and behave the
  same as when compiled with libssh2.
  
  This also tries to avoid the usage of deprecated functions when the
  replacements are available.  The behaviour will not change if versions
  older than libssh-0.8.0 are used.
  
  Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com>
  
  Fixes #4953
  Closes #4962

Steve Holme (27 Feb 2020)
- tests: Automatically deduce the tool name from the test case for unit tests
  
  It is still possible to override the executable to run during the test,
  using the <tool> tag, but this patch removes the requirement that the
  tag must be present for unit tests.
  
  It also removes the possibility of human error when existing test cases
  are used as the basis for new tests, as recently witnessed in 81c37124.
  
  Reviewed-by: Daniel Stenberg
  Closes #4976

- test1323: Added the missing 'unit test' feature requirement in the test case

Daniel Stenberg (26 Feb 2020)
- cookie: remove unnecessary check for 'out != 0'
  
  ... as it will always be non-NULL at this point.
  
  Detected by Coverity: CID 1459009

- http: added 417 response treatment
  
  When doing a request with a body + Expect: 100-continue and the server
  responds with a 417, the same request will be retried immediately
  without the Expect: header.
  
  Added test 357 to verify.
  
  Also added a control instruction to tell the sws test server to not read
  the request body if Expect: is present, which the new test 357 uses.
  
  Reported-by: bramus on github
  Fixes #4949
  Closes #4964

Steve Holme (26 Feb 2020)
- smtp: Tidy up, following recent changes, to maintain the coding style
  
  Closes #4892

- smtp: Support the SMTPUTF8 extension for the EXPN command
  
  Simply notify the server we support the SMTPUTF8 extension if it does.

- smtp: Support the SMTPUTF8 extension in the VRFY command

- smtp: Support the SMTPUTF8 extension in the RCPT TO command
  
  Note: The RCPT TO command isn't required to advertise to the server that
  it contains UTF-8 characters, instead the server is told that a mail may
  contain UTF-8 in any envelope command via the MAIL command.

- smtp: Support the SMTPUTF8 extension in the MAIL command
  
  Support the SMTPUTF8 extension when sending mailbox information in the
  MAIL command (FROM and AUTH parameters). Non-ASCII domain names will
  be ACE encoded, if IDN is supported, whilst non-ASCII characters in
  the local address part are passed to the server.
  
  Reported-by: ygthien on github
  Fixes #4828

- smtp: Detect server support for the UTF-8 extension as defined in RFC-6531

- smtp: Support UTF-8 based host names in the VRFY command

- smtp: Support UTF-8 based host names in the RCPT TO command

- smtp: Support UTF-8 based host names in the MAIL command
  
  Non-ASCII host names will be ACE encoded if IDN is supported.

- url: Make the IDN conversion functions available to others

- smtp: Added UTF-8 mailbox tests to verify existing behaviour

- ftpserver: Updated VRFY_smtp() so the response isn't necessary in the test case

- ftpserver: Corrected the e-mail address regex in MAIL_smtp() and RCTP_smtp()
  
  The dot character between the host and the tld was not being escaped,
  which meant it specified a match of 'any' character rather than an
  explicit dot separator.
  
  Additionally removed the dot character from the host name as it allowed
  the following to be specified as a valid address in our test cases:
  
  <bad@example......com>
  
  Both are typos from 98f7ca7 and 8880f84 :(
  
  I can't remember whether my intention was to allow sub-domains to be
  specified in the host or not with these additional dots, but by placing
  it outside of the host means it can only be specified once per domain
  and by placing a + after the new grouping support for sub-domains is
  kept.
  
  Closes #4912

- hmac: Added a unit test for the HMAC hash generation
  
  Closes #4973

- ntlm: Moved the HMAC MD5 function into the HMAC module as a generic function

- tests: Added a unit test for MD4 digest generation
  
  Closes #4970

- md4: Use const for the length input parameter
  
  This keeps the interface the same as md5 and sha256.

- test1610: Fixed the link to the unit test
  
  Typo from 81c37124.

- ntlm: Removed the dependency on the TLS libaries when using MD5
  
  As we have our own MD5 implementation use the MD5 wrapper to remove the
  TLS dependency.
  
  Closes #4967

- md5/sha256: Updated the functions to allow non-string data to be hashed

- digest: Corrected the name of the local HTTP digest function
  
  Follow up to 2b5b37cb. Local static functions do not require the Curl
  prefix.

- tests: Added a unit test for SHA256 digest generation
  
  Follow up to 2b5b37c.
  
  Closes #4968

- md4: Fixed compilation issues when using GNU TLS gcrypt
  
  * Don't include 'struct' in the gcrypt MD4_CTX typedef
  * The call to gcry_md_read() should use a dereferenced ctx
  * The call to gcry_md_close() should use a dereferenced ctx
  
  Additional minor whitespace issue in the USE_WIN32_CRYPTO code.
  
  Closes #4959

Daniel Stenberg (21 Feb 2020)
- RELEASE-NOTES: synced

- http2: now require nghttp2 >= 1.12.0
  
  To simplify our code and since earlier versions lack important function
  calls libcurl needs to function correctly.
  
  nghttp2 1.12.0 was relased on June 26, 2016.
  
  Closes #4961

- gtls: fix the copyright year
  
  Follow-up from 41fcb4f609

- [jethrogb brought this change]

  GnuTLS: Always send client cert
  
  TLS servers may request a certificate from the client. This request
  includes a list of 0 or more acceptable issuer DNs. The client may use
  this list to determine which certificate to send. GnuTLS's default
  behavior is to not send a client certificate if there is no
  match. However, OpenSSL's default behavior is to send the configured
  certificate. The `GNUTLS_FORCE_CLIENT_CERT` flag mimics OpenSSL
  behavior.
  
  Authored-by: jethrogb on github
  Fixes #1411
  Closes #4958

- [Leo Neat brought this change]

  github action: add CIFuzz
  
  Closes #4960

- cleanup: comment typos
  
  Spotted by 'codespell'
  
  Closes #4957

Steve Holme (20 Feb 2020)
- win32: USE_WIN32_CRYPTO to enable Win32 based MD4, MD5 and SHA256 functions
  
  Whilst lib\md4.c used this pre-processor, lib\md5.c and
  src\tool_metalink.c did not and simply relied on the WIN32
  pre-processor directive.
  
  Reviewed-by: Marcel Raad
  Closes #4955

Daniel Stenberg (19 Feb 2020)
- connect: remove some spurious infof() calls
  
  As they were added primarily for debugging, they provide little use for
  users.
  
  Closes #4951

- HTTP-COOKIES: mention that a trailing newline is required
  
  ... so that we know we got the whole and not a partial line.
  
  Also, changed the formatting of the fields away from a table again since
  the table format requires a github-markdown tool version that we don't
  run on the web server atm.
  
  Reported-by: Sunny Bean
  Fixes #4946
  Closes #4947

- nit: Copyright year out of date
  
  Follow-up to 1fc0617dcc

Jay Satiro (18 Feb 2020)
- tool_util: Improve Windows version of tvnow()
  
  - Change tool_util.c tvnow() for Windows to match more closely to
    timeval.c Curl_now().
  
  - Create a win32 init function for the tool, since some initialization
    is required for the tvnow() changes.
  
  Prior to this change the monotonic time function used by curl in Windows
  was determined at build-time and not runtime. That was a problem because
  when curl was built targeted for compatibility with old versions of
  Windows (eg _WIN32_WINNT < 0x0600) it would use GetTickCount which wraps
  every 49.7 days that Windows has been running.
  
  This change makes curl behave similar to libcurl's tvnow function, which
  determines at runtime whether the OS is Vista+ and if so calls
  QueryPerformanceCounter instead. (Note QueryPerformanceCounter is used
  because it has higher resolution than the more obvious candidate
  GetTickCount64). The changes to tvnow are basically a copy and paste but
  the types in some cases are different.
  
  Ref: https://github.com/curl/curl/issues/3309
  
  Closes https://github.com/curl/curl/pull/4847

Daniel Stenberg (18 Feb 2020)
- SOCKS: fix typo in printf formatting
  
  Follow-up to 4a4b63daa
  
  Reported-by: Peter Piekarski
  Bug: https://github.com/curl/curl/commit/4a4b63daaa01ef59b131d91e8e6e6dfe275c0f08#r37351330

- CURLOPT_REDIR_PROTOCOLS.3: update the DEFAULT section
  
  to be in sync with the description above
  
  Reported-by: Joonas Kuorilehto
  Fixes #4943
  Closes #4945

- docs/GOVERNANCE: refreshed + added "donations" and "commercial support"

- altsvc: make saving the cache an atomic operation
  
  ... by writing the file to temp name then rename to the final when done.
  
  Assisted-by: Jay Satiro
  Fixes #4936
  Closes #4942

- rename: a new file for Curl_rename()
  
  And make the cookie save function use it.

- cookies: make saving atomic with a rename
  
  Saves the file as "[filename].[8 random hex digits].tmp" and renames
  away the extension when done.
  
  Co-authored-by: Jay Satiro
  Reported-by: Mike Frysinger
  Fixes #4914
  Closes #4926

- RELEASE-NOTES: synced

- socks: make the connect phase non-blocking
  
  Removes two entries from KNOWN_BUGS.
  
  Closes #4907

- multi: if Curl_readwrite sets 'comeback' use expire, not loop
  
  Otherwise, a very fast single transfer ricks starving out other
  concurrent transfers.
  
  Closes #4927

- ftp: convert 'sock_accepted' to a plain boolean
  
  This was an array indexed with sockindex but it was only ever used for
  the secondary socket.
  
  Closes #4929

Jay Satiro (15 Feb 2020)
- CURLINFO_COOKIELIST.3: Fix example
  
  Prior to this change the example would try to import cookies from stdin,
  which wasn't what was intended.
  
  Reported-by: 3dyd@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4930

Daniel Stenberg (14 Feb 2020)
- TODO: Paged searches on LDAP server
  
  Closes #4452

- TODO: CURLOPT_SSL_CTX_FUNCTION for LDAPS
  
  Closes #4108

- azure: disable brotli on the macos debug-builds
  
  Because of:
  
  brotli/decode.h:204:33: error: variable length array used [-Werror,-Wvla]
      const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
  
  Closes #4925

Steve Holme (13 Feb 2020)
- tool_home: Fix the copyright year being out of date
  
  Follow up to 9dc350b6.

Jay Satiro (12 Feb 2020)
- tool_homedir: Change GetEnv() to use libcurl's curl_getenv()
  
  - Deduplicate GetEnv() code.
  
  - On Windows change ultimate call to use Windows API
    GetEnvironmentVariable() instead of C runtime getenv().
  
  Prior to this change both libcurl and the tool had their own GetEnv
  which over time diverged. Now the tool's GetEnv is a wrapper around
  curl_getenv (libcurl API function which is itself a wrapper around
  libcurl's GetEnv).
  
  Furthermore this change fixes a bug in that Windows API
  GetEnvironmentVariable() is called instead of C runtime getenv() to get
  the environment variable since some changes aren't always visible to the
  latter.
  
  Reported-by: Christoph M. Becker
  
  Fixes https://github.com/curl/curl/issues/4774
  Closes https://github.com/curl/curl/pull/4863

Daniel Stenberg (12 Feb 2020)
- strerror.h: Copyright year out of date
  
  Follow-up to 1c4fa67e8a8fcf6

Jay Satiro (12 Feb 2020)
- strerror: Increase STRERROR_LEN 128 -> 256
  
  STRERROR_LEN is the constant used throughout the library to set the size
  of the buffer on the stack that the curl strerror functions write to.
  
  Prior to this change some extended length Windows error messages could
  be truncated.
  
  Closes https://github.com/curl/curl/pull/4920

- multi: fix outdated comment
  
  - Do not say that conn->data is "cleared" by multi_done().
  
  If the connection is in use then multi_done assigns another easy handle
  still using the connection to conn->data, therefore in that case it is
  not cleared.
  
  Closes https://github.com/curl/curl/pull/4901

- easy: remove dead code
  
  multi is already assigned to data->multi by curl_multi_add_handle.
  
  Closes https://github.com/curl/curl/pull/4900

Daniel Stenberg (12 Feb 2020)
- create-dirs.d: mention the mode
  
  Reported-by: Dan Jacobson
  Fixes #4766
  Closes #4916

- CURLOPT_ALTSVC_CTRL.3: fix the DEFAULT wording
  
  Assisted-by: Jay Satiro
  Reported-by: Craig Andrews
  Fixes #4909
  Closes #4910

- RELEASE-NOTES: synced

Steve Holme (9 Feb 2020)
- smtp: Simplify the MAIL command and avoid a duplication of send strings
  
  This avoids the duplication of strings when the optional AUTH and SIZE
  parameters are required. It also assists with the modifications that
  are part of #4892.
  
  Closes #4903

Daniel Stenberg (9 Feb 2020)
- altsvc: keep a copy of the file name to survive handle reset
  
  The alt-svc cache survives a call to curl_easy_reset fine, but the file
  name to use for saving the cache was cleared. Now the alt-svc cache has
  a copy of the file name to survive handle resets.
  
  Added test 1908 to verify.
  
  Reported-by: Craig Andrews
  Fixes #4898
  Closes #4902

Steve Holme (9 Feb 2020)
- url: Include the failure reason when curl_win32_idn_to_ascii() fails
  
  Provide the failure reason in the failf() info just as we do for the
  libidn2 version of code.
  
  Closes #4899

Jay Satiro (9 Feb 2020)
- asyn-thread: remove dead code

Daniel Stenberg (8 Feb 2020)
- [Emil Engler brought this change]

  github: Instructions to post "uname -a" on Unix systems in issues
  
  Closes #4896

- [Cristian Greco brought this change]

  configure.ac: fix comments about --with-quiche
  
  A simple s/nghttp3/quiche in some comments of --with-quiche.
  Looks like a copy-paste error from --with-nghttp3.
  
  Closes #4897

Steve Holme (7 Feb 2020)
- checksrc.bat: Fix not being able to run script from the main curl directory
  
  If the script was ran from the main curl directory rather then the
  projects directory then the script would simply exit without error:
  
  C:\url> projects\checksrc.bat
  
  The user would either need to change to the projects directory,
  explicitly specify the current working directory, or perform a
  oneline hacky workaround:
  
  C:\url> cd projects
  C:\url\projects> checksrc.bat
  
  C:\url> checksrc.bat %cd%
  
  C:\url> pushd projects & checksrc.bat & popd
  
  Closes #4894

Daniel Stenberg (7 Feb 2020)
- [Pierre-Yves Bigourdan brought this change]

  digest: Do not quote algorithm in HTTP authorisation
  
  RFC 7616 section 3.4 (The Authorization Header Field) states that "For
  historical reasons, a sender MUST NOT generate the quoted string syntax
  for the following parameters: algorithm, qop, and nc". This removes the
  quoting for the algorithm parameter.
  
  Reviewed-by: Steve Holme
  Closes #4890

- ftp: remove the duplicated user/password struct fields
  
  Closes #4887

- ftp: remove superfluous checking for crlf in user or pwd
  
  ... as this is already done much earlier in the URL parser.
  
  Also add test case 894 that verifies that pop3 with an encodedd CR in
  the user name is rejected.
  
  Closes #4887

Steve Holme (6 Feb 2020)
- ntlm_wb: Use Curl_socketpair() for greater portability
  
  Reported-by: Daniel Stenberg
  Closes #4886

Daniel Stenberg (5 Feb 2020)
- [Frank Gevaerts brought this change]

  contributors: Also include people who contributed to curl-www
  
  Closes #4884

- [Frank Gevaerts brought this change]

  contrithanks: Use the most recent tag by default
  
  (similar to 5296abe)
  
  Closes #4883

- scripts: use last set tag if none given
  
  Makes 'delta' and 'contributors.sh' easier to use.
  
  Make the delta script invoke contrithanks to get current number of
  contributors instead of counting THANKS, for accuracy.
  
  Closes #4881

- ftp: shrink temp buffers used for PORT
  
  These two stack based buffers only need to be 46 + 66 bytes instead of
  256 + 1024.
  
  Closes #4880

- curl: error on --alt-svc use w/o support
  
  Make the tool check for alt-svc support at run-time and return error
  accordingly if not present when the option is used.
  
  Reported-by: Harry Sintonen
  Closes #4878

- docs/HTTP3: add --enable-alt-svc to curl's configure

- RELEASE-PROCEDURE: feature win is closed post-release a few days
  
  We've tried to uphold this already but let's make it official by
  publicly stating this is the way we do it.
  
  Closes #4877

- altsvc: set h3 version at a common single spot
  
  ... and move the #ifdefs out of the functions. Addresses the fact they
  were different before this change.
  
  Reported-by: Harry Sintonen
  Closes #4876

- [Harry Sintonen brought this change]

  altsvc: improved header parser
  
  - Fixed the flag parsing to apply to specific alternative entry only, as
  per RFC. The earlier code would also get totally confused by
  multiprotocol header, parsing flags from the wrong part of the header.
  
  - Fixed the parser terminating on unknown protocols, instead of skipping
  them.
  
  - Fixed a busyloop when protocol-id was present without an equal sign.
  
  Closes #4875

- [Harry Sintonen brought this change]

  ngtcp2: fixed to only use AF_INET6 when ENABLE_IPV6

- docs/HTTP3: update the OpenSSL branch to use for ngtcp2
  
  Reported-by: James Fuller

Steve Holme (4 Feb 2020)
- ntlm: Pass the Curl_easy structure to the private winbind functions
  
  ...rather than the full conndata structure.

Daniel Stenberg (4 Feb 2020)
- RELEASE-NOTES: synced

- tool_operhlp: Copyright year out of date, should be 2020
  
  Follow-up from 2bc373740a3

- [Orgad Shaneh brought this change]

  curl: avoid using strlen for testing if a string is empty
  
  Closes #4873

Steve Holme (3 Feb 2020)
- ntlm: Ensure the HTTP header data is not stored in the challenge/response

Marcel Raad (3 Feb 2020)
- openssl: remove redundant assignment
  
  Fixes a scan-build failure on Bionic.
  
  Closes https://github.com/curl/curl/pull/4872

- travis: update non-OpenSSL Linux jobs to Bionic
  
  For the OpenSSL builds, test 323 [TLS-SRP to non-TLS-SRP server] is
  failing with "curl returned 52, when expecting 35".
  
  Closes https://github.com/curl/curl/pull/4872

Dan Fandrich (3 Feb 2020)
- cirrus: Add some missing semicolons
  
  Newlines aren't preserved in this section so they're needed to separate
  commands. The exports luckily worked anyway as a single long line, but
  erroneously exported a variable called "export"
  [skip ci]

Daniel Gustafsson (2 Feb 2020)
- [Pedro Monreal brought this change]

  cleanup: fix typos and wording in docs and comments
  
  Closes #4869
  Reviewed-by: Emil Engler and Daniel Gustafsson

Steve Holme (2 Feb 2020)
- ntlm: Move the winbind data into the NTLM data structure
  
  To assist with adding winbind support to the SASL NTLM authentication,
  move the winbind specific data out of conndata into ntlmdata.

Daniel Stenberg (30 Jan 2020)
- quiche: Copyright year out of date
  
  Follow-up to 7fc63d72333a

- altsvc: use h3-25
  
  Closes #4868

- [Alessandro Ghedini brought this change]

  quiche: update to draft-25
  
  Closes #4867

- ngtcp2: update to git master and its draft-25 support
  
  Closes #4865

- cookie: check __Secure- and __Host- case sensitively
  
  While most keywords in cookies are case insensitive, these prefixes are
  specified explicitly to get checked "with a case-sensitive match".
  
  (From the 6265bis document in progress)
  
  Ref: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-04
  Closes #4864

- KNOWN_BUGS: Multiple methods in a single WWW-Authenticate: header

- oauth2-bearer.d: works for HTTP too
  
  Reported-by: Mischa Salle
  Bug: https://curl.haxx.se/mail/lib-2020-01/0070.html
  Closes #4862

- multi_done: if multiplexed, make conn->data point to another transfer
  
  ... since the current transfer is being killed. Setting to NULL is
  wrong, leaving it pointing to 'data' is wrong since that handle might be
  about to get freed.
  
  Fixes #4845
  Closes #4858
  Reported-by: dmitrmax on github

- location.d: the method change is from POST to GET only
  
  Not from generic non-GET to GET.
  
  Reported-by: Andrius Merkys
  Ref: #4859
  Closes #4861

- urlapi: guess scheme correct even with credentials given
  
  In the "scheme-less" parsing case, we need to strip off credentials
  first before we guess scheme based on the host name!
  
  Assisted-by: Jay Satiro
  Fixes #4856
  Closes #4857

- global_init: move the IPv6 works status bool to multi handle
  
  Previously it was stored in a global state which contributed to
  curl_global_init's thread unsafety. This boolean is now instead figured
  out in curl_multi_init() and stored in the multi handle. Less effective,
  but thread safe.
  
  Closes #4851

- [Jay Satiro brought this change]

  README: mention that the docs is in docs/
  
  Reported-by: Austin Green
  Fixes #4830
  Closes #4853

- curl.h: define CURL_WIN32 on windows
  
  ... so that the subsequent logic below can use a single known define to know
  when built on Windows (as we don't define WIN32 anymore).
  
  Follow-up to 1adebe7886ddf20b
  
  Reported-by: crazydef on github
  Assisted-by: Marcel Raad
  Fixes #4854
  Closes #4855

- RELEASE-NOTES: synced

- [Jon Rumsey brought this change]

  urldata: do string enums without #ifdefs for build scripts
  
  ... and check for inconsistencies for OS400 at build time with the new
  chkstrings tool.
  
  Closes #4822

- curl: make the -# spaceship bar not wrap the line
  
  The fixed-point math made us lose precision and thus a too high index
  value could be used for outputting the hashtags which could overwrite
  the newline.
  
  The fix increases the precision in the sine table (*100) and the
  associated position math.
  
  Reported-by: Andrew Potter
  Fixes #4849
  Closes #4850

- global_init: assume the EINTR bit by default
  
  - Removed from global_init since it isn't thread-safe. The symbol will
    still remain to not break compiles, it just won't have any effect going
    forward.
  
  - make the internals NOT loop on EINTR (the opposite from previously).
    It only risks returning from the select/poll/wait functions early, and that
    should be risk-free.
  
  Closes #4840

- [Peter Piekarski brought this change]

  conn: do not reuse connection if SOCKS proxy credentials differ
  
  Closes #4835

- llist: removed unused Curl_llist_move()
  
  (and the corresponding unit test)
  
  Closes #4842

- conncache: removed unused Curl_conncache_bundle_size()

- strcase: turn Curl_raw_tolower into static
  
  Only ever used from within this file.

- singleuse.pl: support new API functions, fix curl_dbg_ handling

- wolfssh: make it init properly via Curl_ssh_init()
  
  Closes #4846

- [Aron Rotteveel brought this change]

  form.d: fix two minor typos
  
  Closes #4843

- openssl: make CURLINFO_CERTINFO not truncate x509v3 fields
  
  Avoid "reparsing" the content and instead deliver more exactly what is
  provided in the certificate and avoid truncating the data after 512
  bytes as done previously. This no longer removes embedded newlines.
  
  Fixes #4837
  Reported-by: bnfp on github
  Closes #4841

Jay Satiro (23 Jan 2020)
- CURLOPT_PROXY_SSL_OPTIONS.3: Sync with CURLOPT_SSL_OPTIONS.3
  
  - Copy CURLOPT_SSL_OPTIONS.3 description to CURLOPT_PROXY_SSL_OPTIONS.3.
  
  Prior to this change CURLSSLOPT_NO_PARTIALCHAIN was missing from the
  CURLOPT_PROXY_SSL_OPTIONS description.

Daniel Stenberg (22 Jan 2020)
- mk-ca-bundle: add support for CKA_NSS_SERVER_DISTRUST_AFTER
  
  For now, no cert in the bundle actually sets a date there...
  
  Co-Authored-by: Jay Satiro
  Reported-by: Christian Heimes
  Fixes #4834
  Closes #4836

- RELEASE-NOTES: synced

- [Pavel Volgarev brought this change]

  smtp: Allow RCPT TO command to fail for some recipients
  
  Introduces CURLOPT_MAIL_RCPT_ALLLOWFAILS.
  
  Verified with the new tests 3002-3007
  
  Closes #4816

- copyright: fix year ranges
  
  follow-up from dea17b519d (one of these days I'll learn to check before
  I push)

- [nao brought this change]

  http: move "oauth_bearer" from connectdata to Curl_easy
  
  Fixes the bug where oauth_bearer gets deallocated when we re-use a
  connection.
  
  Closes #4824

- [Emil Engler brought this change]

  curl: Let -D merge headers in one file again
  
  Closes #4762
  Fixes #4753

- data.d: remove "Multiple files can also be specified"
  
  It is superfluous and could even be misleading.
  
  Bug: https://curl.haxx.se/mail/archive-2020-01/0016.html
  Reported-by: Mike Norton
  Closes #4832

Marcel Raad (20 Jan 2020)
- CMake: support specifying the target Windows version
  
  Previously, it was only possible to set it to Windows Vista or XP by
  setting the option `ENABLE_INET_PTON` to `ON` resp. `OFF`.
  Use a new cache variable `CURL_TARGET_WINDOWS_VERSION` to be able to
  explicitly set the target Windows version. `ENABLE_INET_PTON` is
  ignored in this case.
  
  Ref: https://github.com/curl/curl/pull/1639#issuecomment-313039352
  Ref: https://github.com/curl/curl/pull/4607#issuecomment-557541456
  Closes https://github.com/curl/curl/pull/4815

Daniel Stenberg (20 Jan 2020)
- http.h: Copyright year out of date, should be 2020
  
  Follow-up to 7ff9222ced8c

- [加藤郁之 brought this change]

  HTTP: increase EXPECT_100_THRESHOLD to 1Mb
  
  Mentioned: https://curl.haxx.se/mail/lib-2020-01/0050.html
  
  Closes #4814

- ROADMAP: thread-safe `curl_global_init()`
  
  I'd like to see this happen.

- RELEASE-NOTES: synced

- wolfssl: use the wc-prefixed symbol alternatives
  
  The symbols without wc_ prefix are not always provided.
  
  Ref: https://github.com/wolfSSL/wolfssl/issues/2744
  
  Closes #4827

- polarssl: removed
  
  As detailed in DEPRECATE.md, the polarssl support is now removed after
  having been disabled for 6 months and nobody has missed it.
  
  The threadlock files used by mbedtls are renamed to an 'mbedtls' prefix
  instead of the former 'polarssl' and the common functions that
  previously were shared between mbedtls and polarssl and contained the
  name 'polarssl' have now all been renamed to instead say 'mbedtls'.
  
  Closes #4825

Marcel Raad (16 Jan 2020)
- libssh2: fix variable type
  
  This led to a conversion warning on 64-bit MinGW, which has 32-bit
  `long` but 64-bit `size_t`.
  
  Closes https://github.com/curl/curl/pull/4823

Daniel Stenberg (16 Jan 2020)
- curl:progressbarinit: ignore column width from terminals < 20
  
  To avoid division by zero - or other issues.
  
  Reported-by: Daniel Marjamäki
  Closes #4818

- wolfssh: set the password correctly for PASSWORD auth

- wolfssh: remove fprintf() calls (and uses of __func__)

Marcel Raad (14 Jan 2020)
- CMake: use check_symbol_exists also for inet_pton
  
  It doesn't make much sense to only check if the function can be linked
  when it's not declared in any header and that is treated as an error.
  With the correct target Windows version set, the function is declared
  in ws2tcpip.h and the comment above the modified block is invalid.
  
  Also, move the definition of `_WIN32_WINNT` up to before all symbol
  availability checks so that we don't have to care which ones must be
  done after it.
  
  Tested with Visual Studio 2019 and current MinGW-w64.
  
  Closes https://github.com/curl/curl/pull/4808

Jay Satiro (13 Jan 2020)
- schannel_verify: Fix alt names manual verify for UNICODE builds
  
  Follow-up to 29e40a6 from two days ago, which added that feature for
  Windows 7 and earlier. The bug only occurred in same.
  
  Ref: https://github.com/curl/curl/pull/4761

Daniel Stenberg (13 Jan 2020)
- HTTP-COOKIES.md: describe the cookie file format
  
  ... and refer to that file from from CURLOPT_COOKIEFILE.3 and
  CURLOPT_COOKIELIST.3
  
  Assisted-by: Jay Satiro
  Reported-by: bsammon on github
  Fixes #4805
  Closes #4806

- [Tobias Hieta brought this change]

  CMake: Add support for CMAKE_LTO option.
  
  This enables Link Time Optimization. LTO is a proven technique for
  optimizing across compilation units.
  
  Closes #4799

- RELEASE-NOTES: synced

- ConnectionExists: respect the max_concurrent_streams limits
  
  A regression made the code use 'multiplexed' as a boolean instead of the
  counter it is intended to be. This made curl try to "over-populate"
  connections with new streams.
  
  This regression came with 41fcdf71a1, shipped in curl 7.65.0.
  
  Also, respect the CURLMOPT_MAX_CONCURRENT_STREAMS value in the same
  check.
  
  Reported-by: Kunal Ekawde
  Fixes #4779
  Closes #4784

- curl: make #0 not output the full URL
  
  It was not intended nor documented!
  
  Added test 1176 to verify.
  
  Reported-by: vshmuk on hackerone
  
  Closes #4812

- wolfSSH: new SSH backend
  
  Adds support for SFTP (not SCP) using WolfSSH.
  
  Closes #4231

- curl: remove 'config' field from OutStruct
  
  As it was just unnecessary duplicated information already stored in the
  'per_transfer' struct and that's around mostly anyway.
  
  The duplicated pointer caused problems when the code flow was aborted
  before the dupe was filled in and could cause a NULL pointer access.
  
  Reported-by: Brian Carpenter
  Fixes #4807
  Closes #4810

- misc: Copyright year out of date, should be 2020
  
  Follow-up to recent commits
  
  [skip ci]

Jay Satiro (11 Jan 2020)
- [Santino Keupp brought this change]

  libssh2: add support for forcing a hostkey type
  
  - Allow forcing the host's key type found in the known_hosts file.
  
  Currently, curl (with libssh2) does not take keys from your known_hosts
  file into account when talking to a server. With this patch the
  known_hosts file will be searched for an entry matching the hostname
  and, if found, libssh2 will be told to claim this key type from the
  server.
  
  Closes https://github.com/curl/curl/pull/4747

- [Nicolas Guillier brought this change]

  cmake: Improve libssh2 check on Windows
  
  - Add "libssh2" name to FindLibSSH2 library search.
  
  On Windows systems, libSSH2 CMake installation may name the library
  "LibSSH2".
  
  Prior to this change cmake only checked for name "ssh2". On Linux that
  works fine because it will prepend the "lib", but it doesn't do that on
  Windows.
  
  Closes https://github.com/curl/curl/pull/4804

- [Faizur Rahman brought this change]

  schannel: Make CURLOPT_CAINFO work better on Windows 7
  
  - Support hostname verification via alternative names (SAN) in the
    peer certificate when CURLOPT_CAINFO is used in Windows 7 and earlier.
  
  CERT_NAME_SEARCH_ALL_NAMES_FLAG doesn't exist before Windows 8. As a
  result CertGetNameString doesn't quite work on those versions of
  Windows. This change provides an alternative solution for
  CertGetNameString by iterating through CERT_ALT_NAME_INFO for earlier
  versions of Windows.
  
  Prior to this change many certificates failed the hostname validation
  when CURLOPT_CAINFO was used in Windows 7 and earlier. Most certificates
  now represent multiple hostnames and rely on the alternative names field
  exclusively to represent their hostnames.
  
  Reported-by: Jeroen Ooms
  
  Fixes https://github.com/curl/curl/issues/3711
  Closes https://github.com/curl/curl/pull/4761

- [Emil Engler brought this change]

  ngtcp2: Add an error code for QUIC connection errors
  
  - Add new error code CURLE_QUIC_CONNECT_ERROR for QUIC connection
    errors.
  
  Prior to this change CURLE_FAILED_INIT was used, but that was not
  correct.
  
  Closes https://github.com/curl/curl/pull/4754

- multi: Change curl_multi_wait/poll to error on negative timeout
  
  - Add new error CURLM_BAD_FUNCTION_ARGUMENT and return that error when
    curl_multi_wait/poll is passed timeout param < 0.
  
  Prior to this change passing a negative value to curl_multi_wait/poll
  such as -1 could cause the function to wait forever.
  
  Reported-by: hamstergene@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4763
  
  Closes https://github.com/curl/curl/pull/4765

- [Marc Aldorasi brought this change]

  cmake: Enable SMB for Windows builds
  
  - Define USE_WIN32_CRYPTO by default. This enables SMB.
  
  - Show whether SMB is enabled in the "Enabled features" output.
  
  - Fix mingw compiler warning for call to CryptHashData by casting away
    const param. mingw CryptHashData prototype is wrong.
  
  Closes https://github.com/curl/curl/pull/4717

- vtls: Refactor Curl_multissl_version to make the code clearer
  
  Reported-by: Johannes Schindelin
  
  Ref: https://github.com/curl/curl/pull/3863#pullrequestreview-241395121
  
  Closes https://github.com/curl/curl/pull/4803

Daniel Stenberg (10 Jan 2020)
- fix: Copyright year out of date, should be 2020
  
  Follow-up to 875314ed0bf3b

Marcel Raad (10 Jan 2020)
- hostip: move code to resolve IP address literals to `Curl_resolv`
  
  The code was duplicated in the various resolver backends.
  
  Also, it was called after the call to `Curl_ipvalid`, which matters in
  case of `CURLRES_IPV4` when called from `connect.c:bindlocal`. This
  caused test 1048 to fail on classic MinGW.
  
  The code ignores `conn->ip_version` as done previously in the
  individual resolver backends.
  
  Move the call to the `resolver_start` callback up to appease test 655,
  which wants it to be called also for literal addresses.
  
  Closes https://github.com/curl/curl/pull/4798

Daniel Stenberg (9 Jan 2020)
- scripts/delta: adapt to new public header layout

- test1167: verify global symbols in public headers are curl prefixed
  
  ... using the new badsymbols.pl perl script
  
  Fixes #4793
  Closes #4794

- libtest/mk-lib1521: adapt to new public header layout

- include: remove non-curl prefixed defines
  
  ...requires some rearranging of the setup of CURLOPT_ and CURLMOPT_
  enums.

- curl.h: remove WIN32 define
  
  It isn't our job to define this in a public header - and it defines a
  name outside of our naming scope.

- tool_dirhie.c: fix the copyright year range
  
  Follow-up to: 4027bd72d9

- bump: work towards 7.69.0 is started

Jay Satiro (9 Jan 2020)
- tool_dirhie: Allow directory traversal during creation
  
  - When creating a directory hierarchy do not error when mkdir fails due
    to error EACCESS (13) "access denied".
  
  Some file systems allow for directory traversal; in this case that it
  should be possible to create child directories when permission to the
  parent directory is restricted.
  
  This is a regression caused by me in f16bed0 (precedes curl-7_61_1).
  Basically I had assumed that if a directory already existed it would
  fail only with error EEXIST, and not error EACCES. The latter may
  happen if the directory exists but has certain restricted permissions.
  
  Reported-by: mbeifuss@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4796
  Closes https://github.com/curl/curl/pull/4797

Daniel Stenberg (9 Jan 2020)
- KNOWN_BUGS: AUTH PLAIN for SMTP is not working on all servers
  
  Closes #4080

- docs/RELEASE-PROCEDURE.md: pushed some release dates
  
  Ref: https://curl.haxx.se/mail/lib-2020-01/0031.html

- runtests: make random seed fixed for a month
  
  When using randomized features of runtests (-R and --shallow) it is
  useful to have a fixed random seed to make sure for example extra
  commits in a branch or a rebase won't change the seed that would make
  repeated runs work differently.
  
  As it is also useful to change seed sometimes, the default seed is now
  determined based on the current month (and first line curl -V
  output). When the month changes, so will the random seed.
  
  The specific seed is also shown in the standard test suite top header
  and it can be set explictly with the new --seed=[num] option so that the
  exact order of a previous run can be achieved.
  
  Closes #4734

- RELEASE-PROCEDURE.md: fix next release date (Feb 26)
  
  [skip ci]

Version 7.68.0 (8 Jan 2020)

Daniel Stenberg (8 Jan 2020)
- RELEASE-NOTES: 7.68.0

- THANKS: updated with names from the 7.68.0 release

- RELEASE-PROCEDURE: add four future release dates
  
  and remove four past release dates
  
  [skip ci]

Marcel Raad (6 Jan 2020)
- TrackMemory tests: always remove CR before LF
  
  It was removed for output containing ' =' via `s/ =.*//`. With classic
  MinGW, this made lines with `free()` end with CRLF, but lines with e.g.
  `malloc()` end with only LF. The tests expect LF only.
  
  Closes https://github.com/curl/curl/pull/4788

Daniel Stenberg (6 Jan 2020)
- multi.h: move INITIAL_MAX_CONCURRENT_STREAMS from public header
  
  ... to the private multihhandle.h. It is not for public use and it
  wasn't prefixed correctly anyway!
  
  Closes #4790

- file: fix copyright year range
  
  Follow-up to 1b71bc532bd

- curl -w: handle a blank input file correctly
  
  Previously it would end up with an uninitialized memory buffer that
  would lead to a crash or junk getting output.
  
  Added test 1271 to verify.
  
  Reported-by: Brian Carpenter
  Closes #4786

- file: on Windows, refuse paths that start with \\
  
  ... as that might cause an unexpected SMB connection to a given host
  name.
  
  Reported-by: Fernando Muñoz
  CVE-2019-15601
  Bug: https://curl.haxx.se/docs/CVE-2019-15601.html

Jay Satiro (6 Jan 2020)
- CURLOPT_READFUNCTION.3: fix fopen params in example

- CURLOPT_READFUNCTION.3: fix variable name in example
  
  Reported-by: Paul Joyce
  
  Fixes https://github.com/curl/curl/issues/4787

Daniel Stenberg (5 Jan 2020)
- curl:getparameter return error for --http3 if libcurl doesn't support
  
  Closes #4785

- docs: mention CURL_MAX_INPUT_LENGTH restrictions
  
  ... for curl_easy_setopt() and curl_url_set().
  
  [skip ci]
  
  Closes #4783

- curl: properly free mimepost data
  
  ... as it could otherwise leak memory when a transfer failed.
  
  Added test 1293 to verify.
  
  Reported-by: Brian Carpenter
  Fixes #4781
  Closes #4782

- curl: cleanup multi handle on failure
  
  ... to fix memory leak in error path.
  
  Fixes #4772
  Closes #4780
  Reported-by: Brian Carpenter

Marcel Raad (3 Jan 2020)
- lib: fix compiler warnings with `CURL_DISABLE_VERBOSE_STRINGS`
  
  Closes https://github.com/curl/curl/pull/4775

Daniel Stenberg (3 Jan 2020)
- COPYING: it's 2020!
  
  [skip ci]

Jay Satiro (3 Jan 2020)
- [Marc Aldorasi brought this change]

  tests: Fix bounce requests with truncated writes
  
  Prior to this change the swsbounce check in service_connection could
  fail because prevtestno and prevpartno were not set, which would cause
  the wrong response data to be sent to some tests and cause them to fail.
  
  Ref: https://github.com/curl/curl/pull/4717#issuecomment-570240785

Marcel Raad (31 Dec 2019)
- tool: make a few char pointers point to const char instead
  
  These are read-only.
  
  Closes https://github.com/curl/curl/pull/4771

Jay Satiro (31 Dec 2019)
- tests: Change NTLM tests to require SSL
  
  Prior to this change tests that required NTLM feature did not require
  SSL feature.
  
  There are pending changes to cmake builds that will allow enabling NTLM
  in non-SSL builds in Windows. In that case the NTLM auth strings created
  are different from what is expected by the NTLM tests and they fail:
  
  "The issue with NTLM is that previous non-SSL builds would not enable
  NTLM and so the NTLM tests would be skipped."
  
  Assisted-by: marc-groundctl@users.noreply.github.com
  
  Ref: https://github.com/curl/curl/pull/4717#issuecomment-566218729
  
  Closes https://github.com/curl/curl/pull/4768

- [Michael Forney brought this change]

  bearssl: Improve I/O handling
  
  Factor out common I/O loop as bearssl_run_until, which reads/writes TLS
  records until the desired engine state is reached. This is now used for
  the handshake, read, write, and close.
  
  Match OpenSSL SSL_write behavior, and don't return the number of bytes
  written until the corresponding records have been completely flushed
  across the socket. This involves keeping track of the length of data
  buffered into the TLS engine, and assumes that when CURLE_AGAIN is
  returned, the write function will be called again with the same data
  and length arguments. This is the same requirement of SSL_write.
  
  Handle TLS close notify as EOF when reading by returning 0.
  
  Closes https://github.com/curl/curl/pull/4748

- travis: Fix error detection
  
  - Stop using inline shell scripts for before_script and script sections.
  
  Prior to this change Travis could ignore errors from commands in inline
  scripts. I don't understand how or why it happens. This is a workaround.
  
  Assisted-by: Simon Warta
  
  Ref: https://github.com/travis-ci/travis-ci/issues/1066
  
  Fixes https://github.com/curl/curl/issues/3730
  Closes https://github.com/curl/curl/pull/3755

- tool_operate: fix mem leak when failed config parse
  
  Found by fuzzing the config file.
  
  Reported-by: Geeknik Labs
  
  Fixes https://github.com/curl/curl/issues/4767

- [Xiang Xiao brought this change]

  lib: remove erroneous +x file permission on some c files
  
  Modified by commit eb9a604 accidentally.
  
  Closes https://github.com/curl/curl/pull/4756

- [Xiang Xiao brought this change]

  lib: fix warnings found when porting to NuttX
  
  - Undefine DEBUGASSERT in curl_setup_once.h in case it was already
    defined as a system macro.
  
  - Don't compile write32_le in curl_endian unless
    CURL_SIZEOF_CURL_OFF_T > 4, since it's only used by Curl_write64_le.
  
  - Include <arpa/inet.h> in socketpair.c.
  
  Closes https://github.com/curl/curl/pull/4756

- os400: Add missing CURLE error constants
  
  Bug: https://github.com/curl/curl/pull/4754#issuecomment-569126922
  Reported-by: Emil Engler

- CURLOPT_HEADERFUNCTION.3: Document that size is always 1
  
  For compatibility with `fwrite`, the `CURLOPT_HEADERFUNCTION` callback
  is passed two `size_t` parameters which, when multiplied, designate the
  number of bytes of data passed in. In practice, CURL always sets the
  first parameter (`size`) to 1.
  
  This practice is also enshrined in documentation and cannot be changed
  in future. The documentation states that the default callback is
  `fwrite`, which means `fwrite` must be a suitable function for this
  purpose. However, the documentation also states that the callback must
  return the number of *bytes* it successfully handled, whereas ISO C
  `fwrite` returns the number of items (each of size `size`) which it
  wrote. The only way these numbers can be equal is if `size` is 1.
  
  Since `size` is 1 and can never be changed in future anyway, document
  that fact explicitly and let users rely on it.
  
  Reported-by: Frank Gevaerts
  Commit-message-by: Christopher Head
  
  Ref: https://github.com/curl/curl/pull/2787
  
  Fixes https://github.com/curl/curl/issues/4758

- examples/postinmemory.c: Call curl_global_cleanup always
  
  Prior to this change curl_global_cleanup was not called if
  curl_easy_init failed.
  
  Reported-by: kouzhudong@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4751

Daniel Stenberg (21 Dec 2019)
- url2file.c: fix copyright year
  
  Follow-up to 525787269599b5

- [Rickard Hallerbäck brought this change]

  examples/url2file.c: corrected a comment
  
  The comment was confusing and suggested that setting CURLOPT_NOPROGRESS
  to 0L would both enable and disable debug output at the same time, like
  a Schrödinger's cat of CURLOPTs.
  
  Closes #4745

- HISTORY: OSS-Fuzz started fuzzing libcurl in 2017

- RELEASE-NOTES: synced

Jay Satiro (20 Dec 2019)
- ngtcp2: Support the latest update key callback type
  
  - Remove our cb_update_key in favor of ngtcp2's new
    ngtcp2_crypto_update_key_cb which does the same thing.
  
  Several days ago the ngtcp2_update_key callback function prototype was
  changed in ngtcp2/ngtcp2@42ce09c. Though it would be possible to
  fix up our cb_update_key for that change they also added
  ngtcp2_crypto_update_key_cb which does the same thing so we'll use that
  instead.
  
  Ref: https://github.com/ngtcp2/ngtcp2/commit/42ce09c
  
  Closes https://github.com/curl/curl/pull/4735

Daniel Stenberg (19 Dec 2019)
- sws: search for "Testno:" header uncondtionally if no testno
  
  Even if the initial request line wasn't found. With the fix to 1455, the
  test number is now detected correctly.
  
  (Problem found when running tests in random order.)
  
  Closes #4744

- tests: set LC_ALL in more tests
  
  Follow-up to 23208e330ac0c21
  
  Closes #4743

- test165: set LC_ALL=en_US.UTF-8 too
  
  On my current Debian Unstable with libidn2 2.2.0, I get an error if
  LC_ALL is set to blank. Then curl errors out with:
  
  curl: (3) Failed to convert www.åäö.se to ACE; could not convert string to UTF-8
  
  Closes #4738

- curl.h: add two defines for the "pre ISO C" case
  
  Without this fix, this caused a compilation failure on AIX with IBM xlc
  13.1.3 compiler.
  
  Reported-by: Ram Krushna Mishra
  Fixes #4739
  Closes #4740

- create_conn: prefer multiplexing to using new connections
  
  ... as it would previously prefer new connections rather than
  multiplexing in most conditions! The (now removed) code was a leftover
  from the Pipelining code that was translated wrongly into a
  multiplex-only world.
  
  Reported-by: Kunal Ekawde
  Bug: https://curl.haxx.se/mail/lib-2019-12/0060.html
  Closes #4732

- test1456: remove the use of a fixed local port
  
  Fixup the test to instead not compare the port number. It sometimes
  caused problems like this:
  
  "curl: (45) bind failed with errno 98: Address already in use"
  
  Closes #4733

Jay Satiro (18 Dec 2019)
- CURLOPT_QUOTE.3: fix typos
  
  Prior to this change the EXAMPLE in the QUOTE/PREQUOTE/POSTQUOTE man
  pages would not compile because a variable name was incorrect.
  
  Reported-by: Bylon2@users.noreply.github.com
  
  Fixes https://github.com/curl/curl/issues/4736

- [Gisle Vanem brought this change]

  strerror: Fix compiler warning "empty expression"
  
  - Remove the final semi-colon in the SEC2TXT() macro definition.
  
  Before:  #define SEC2TXT(sec) case sec: txt = #sec; break;
  
  After:   #define SEC2TXT(sec) case sec: txt = #sec; break
  
  Prior to this change SEC2TXT(foo); would generate break;; which caused
  the empty expression warning.
  
  Ref: https://github.com/curl/curl/commit/5b22e1a#r36458547

Daniel Stenberg (18 Dec 2019)
- curl/parseconfig: use curl_free() to free memory allocated by libcurl
  
  Reported-by: bxac on github
  Fixes #4730
  Closes #4731

- curl/parseconfig: fix mem-leak
  
  When looping, first trying '.curlrc' and then '_curlrc', the function
  would not free the first string.
  
  Closes #4731

- CURLOPT_URL.3: "curl supports SMB version 1 (only)"
  
  [skip ci]

- test1270: a basic -w redirect_url test
  
  Closes #4728

- HISTORY: the SMB(S) support landed in 2014

- define: remove HAVE_ENGINE_LOAD_BUILTIN_ENGINES, not used anymore
  
  It is covered by USE_OPENSSL_ENGINE now.
  
  Reported-by: Gisle Vanem
  Bug: https://github.com/curl/curl/commit/87b9337c8f76c21c57b204e88b68c6ecf3bd1ac0#commitcomment-36447951
  
  Closes #4725

- lib: remove ASSIGNWITHINCONDITION exceptions, use our code style
  
  ... even for macros
  
  Reviewed-by: Daniel Gustafsson
  Reviewed-by: Jay Satiro
  Reported-by: Jay Satiro
  Fixes #4683
  Closes #4722

- tests: make sure checksrc runs on header files too

- Revert "checksrc: fix regexp for ASSIGNWITHINCONDITION"
  
  This reverts commit ba82673dac3e8d00a76aa5e3779a0cb80e7442af.
  
  Bug: #4683

- KNOWN_BUGS: TLS session cache doesn't work with TFO
  
  [skip ci]
  Closes #4301

- KNOWN_BUGS: Connection information when using TCP Fast Open
  
  Also point to #4296 for more details
  Closes #4296

- KNOWN_BUGS: LDAP on Windows doesn't work
  
  Closes #4261

- docs: TLS SRP doesn't work with TLS 1.3
  
  Reported-by: sayrer on github
  Closes #4262
  [skip ci]

Dan Fandrich (16 Dec 2019)
- cirrus: Switch to the FreeBSD 12.1 point release & enable more tests.
  
  A few tests are now passing on FreeBSD, so no longer skip them.
  [skip ci]

Daniel Stenberg (16 Dec 2019)
- azure: the macos cmake doesn't need to install cmake
  
   Error: cmake 3.15.5 is already installed
   To upgrade to 3.16.1, run `brew upgrade cmake`.
  
  Closes #4723

Jay Satiro (15 Dec 2019)
- winbuild: Document CURL_STATICLIB requirement for static libcurl
  
  A static libcurl (ie winbuild mode=static) requires that the user define
  CURL_STATICLIB when using it in their application. This is already
  covered in the FAQ and INSTALL.md, but is a pretty important point so
  now it's noted in the BUILD.WINDOWS.txt as well.
  
  Assisted-by: Michael Vittiglio
  
  Closes https://github.com/curl/curl/pull/4721

Daniel Stenberg (15 Dec 2019)
- [Santino Keupp brought this change]

  libssh2: add support for ECDSA and ed25519 knownhost keys
  
  ... if a new enough libssh2 version is present.
  
  Source: https://curl.haxx.se/mail/archive-2019-12/0023.html
  Co-Authored-by: Daniel Stenberg
  Closes #4714

- lib1591: free memory properly on OOM, in the trailers callback
  
  Detected by torture tests.
  
  Closes #4720

- runtests: --repeat=[num] to repeat tests
  
  Closes #4715

- RELEASE-NOTES: synced

- azure: add a torture test on mac
  
  Uses --shallow=25 to keep it small enough to get through in time.
  
  Closes #4712

- multi: free sockhash on OOM
  
  This would otherwise leak memory in the error path.
  
  Detected by torture test 1540.
  
  Closes #4713

Marcel Raad (13 Dec 2019)
- tests: use DoH feature for DoH tests
  
  Previously, http/2 was used instead.
  
  Assisted-by: Jay Satiro
  Closes https://github.com/curl/curl/pull/4692

- hostip: suppress compiler warning
  
  With `--disable-doh --disable-threaded-resolver`, the `dns` parameter
  is not used.
  
  Closes https://github.com/curl/curl/pull/4692

- tests: fix build with `CURL_DISABLE_DOH`
  
  Closes https://github.com/curl/curl/pull/4692

Daniel Stenberg (13 Dec 2019)
- azure: add a torture test
  
  Skipping all FTP tests for speed reasons.
  
  Closes #4697

- azure: make the default build use --enable-debug --enable-werror

- ntlm_wb: fix double-free in OOM
  
  Detected by torture testing test 1310
  
  Closes #4710

Dan Fandrich (13 Dec 2019)
- cirrus: Drop the FreeBSD 10.4 build
  
  Upstream support for 10.4 ended a year ago, and it looks like the image
  is now gone, too.
  [skip ci]

Daniel Stenberg (13 Dec 2019)
- unit1620: fix bad free in OOM
  
  Closes #4709

- unit1609: fix mem-leak in OOM
  
  Closes #4709

- unit1607: fix mem-leak in OOM
  
  Closes #4709

- lib1559: fix mem-leak in OOM
  
  Closes #4709

- lib1557: fix mem-leak in OOM
  
  Closes #4709

- altsvc: make the save function ignore NULL filenames
  
  It might happen in OOM situations. Detected bv torture tests.
  
  Closes #4707

- curl: fix memory leak in OOM in etags logic
  
  Detected by torture tests
  
  Closes #4706

- doh: make it behave when built without proxy support
  
  Reported-by: Marcel Raad
  Bug: https://github.com/curl/curl/pull/4692#issuecomment-564115734
  
  Closes #4704

- curl: improved cleanup in upload error path
  
  Memory leak found by torture test 58
  
  Closes #4705

- mailmap: fix Andrew Ishchuk

- travis: make torture use --shallow=40
  
  As a first step to enable it to run over a more diverse set of tests in
  a reasonable time.

- runtests: introduce --shallow to reduce huge torture tests
  
  When set, shallow mode limits runtests -t to make no more than NUM fails
  per test case. If more are found, it will randomly discard entries until
  the number is right. The random seed can also be set.
  
  This is particularly useful when running MANY tests as then most torture
  failures will already fail the same functions over and over and make the
  total operation painfully tedious.
  
  Closes #4699

- conncache: CONNECT_ONLY connections assumed always in-use
  
  This makes them never to be considered "the oldest" to be discarded when
  reaching the connection cache limit. The reasoning here is that
  CONNECT_ONLY is primarily used in combination with using the
  connection's socket post connect and since that is used outside of
  curl's knowledge we must assume that it is in use until explicitly
  closed.
  
  Reported-by: Pavel Pavlov
  Reported-by: Pavel Löbl
  Fixes #4426
  Fixes #4369
  Closes #4696

- [Gisle Vanem brought this change]

  vtls: make BearSSL possible to set with CURL_SSL_BACKEND
  
  Ref: https://github.com/curl/curl/commit/9b879160df01e7ddbb4770904391d3b74114302b#commitcomment-36355622
  
  Closes #4698

- RELEASE-NOTES: synced

- travis: remove "coverage", make it "torture"
  
  The coveralls service and test coverage numbers are just too unreliable.
  Removed badge from README.md as well.
  
  Fixes #4694
  Closes #4695

- azure: add libssh2 and cmake macos builds
  
  Removed the macos libssh2 build from travis
  
  Closes #4686

- curl: use errorf() better
  
  Change series of error outputs to use errorf().
  
  Only errors that are due to mistakes in command line option usage should
  use helpf(), other types of errors in the tool should rather use
  errorf().
  
  Closes #4691

Jay Satiro (9 Dec 2019)
- [Marc Hoersken brought this change]

  tests: make it possible to set executable extensions
  
  This enables the use of Windows Subsystem for Linux (WSL) to run the
  testsuite against Windows binaries while using Linux servers.
  
  This commit introduces the following environment variables:
  - CURL_TEST_EXE_EXT: set the executable extension for all components
  - CURL_TEST_EXE_EXT_TOOL: set it for the curl tool only
  - CURL_TEST_EXE_EXT_SSH: set it for the SSH tools only
  
  Later testcurl.pl could be adjusted to make use of those variables.
  - CURL_TEST_EXE_EXT_SRV: set it for the test servers only
  
  (This is one of several commits to support use of WSL for the tests.)
  
  Closes https://github.com/curl/curl/pull/3899

- [Marc Hoersken brought this change]

  tests: fix permissions of ssh keys in WSL
  
  Keys created on Windows Subsystem for Linux (WSL) require it for some
  reason.
  
  (This is one of several commits to support use of WSL for the tests.)
  
  Ref: https://github.com/curl/curl/pull/3899

- [Marc Hoersken brought this change]

  tests: use \r\n for log messages in WSL
  
  Bash in Windows Subsystem for Linux (WSL) requires it for some reason.
  
  (This is one of several commits to support use of WSL for the tests.)
  
  Ref: https://github.com/curl/curl/pull/3899

- [Andrew Ishchuk brought this change]

  winbuild: Define CARES_STATICLIB when WITH_CARES=static
  
  When libcurl is built with MODE=static, c-ares is forced into static
  linkage too. That doesn't happen when MODE=dll so linker would break
  over undefined symbols.
  
  closes https://github.com/curl/curl/pull/4688

Daniel Stenberg (9 Dec 2019)
- conn: always set bits.close with connclose()
  
  Closes #4690

- cirrus: enable clang sanitizers on freebsd 13

- conncache: fix multi-thread use of shared connection cache
  
  It could accidentally let the connection get used by more than one
  thread, leading to double-free and more.
  
  Reported-by: Christopher Reid
  Fixes #4544
  Closes #4557

- azure: add a vanilla macos build
  
  Closes #4685

- curl: make the etag load logic work without fseek
  
  The fseek()s were unnecessary and caused Coverity warning CID 1456554
  
  Closes #4681

- mailmap: Mohammad Hasbini

- [Mohammad Hasbini brought this change]

  docs: fix some typos
  
  Closes #4680

- RELEASE-NOTES: synced

Jay Satiro (5 Dec 2019)
- lib: fix some loose ends for recently added CURLSSLOPT_NO_PARTIALCHAIN
  
  Add support for CURLSSLOPT_NO_PARTIALCHAIN in CURLOPT_PROXY_SSL_OPTIONS
  and OS400 package spec.
  
  Also I added the option to the NameValue list in the tool even though it
  isn't exposed as a command-line option (...yet?). (NameValue stringizes
  the option name for the curl cmd -> libcurl source generator)
  
  Follow-up to 564d88a which added CURLSSLOPT_NO_PARTIALCHAIN.
  
  Ref: https://github.com/curl/curl/pull/4655

- setopt: Fix ALPN / NPN user option when built without HTTP2
  
  - Stop treating lack of HTTP2 as an unknown option error result for
    CURLOPT_SSL_ENABLE_ALPN and CURLOPT_SSL_ENABLE_NPN.
  
  Prior to this change it was impossible to disable ALPN / NPN if libcurl
  was built without HTTP2. Setting either option would result in
  CURLE_UNKNOWN_OPTION and the respective internal option would not be
  set. That was incorrect since ALPN and NPN are used independent of
  HTTP2.
  
  Reported-by: Shailesh Kapse
  
  Fixes https://github.com/curl/curl/issues/4668
  Closes https://github.com/curl/curl/pull/4672

Daniel Stenberg (5 Dec 2019)
- etag: allow both --etag-compare and --etag-save in same cmdline
  
  Fixes #4669
  Closes #4678

Marcel Raad (5 Dec 2019)
- curl_setup: fix `CURLRES_IPV6` condition
  
  Move the definition of `CURLRES_IPV6` to before undefining
  `HAVE_GETADDRINFO`. Regression from commit 67a08dca27a which caused
  some tests to fail and others to be skipped with c-ares.
  
  Fixes https://github.com/curl/curl/issues/4673
  Closes https://github.com/curl/curl/pull/4677

Daniel Stenberg (5 Dec 2019)
- test342: make it return a 304 as the tag matches

Peter Wu (4 Dec 2019)
- CMake: add support for building with the NSS vtls backend
  
  Options are cross-checked with configure.ac and acinclude.m4.
  Tested on Arch Linux, untested on other platforms like Windows or macOS.
  
  Closes #4663
  Reviewed-by: Kamil Dudka

Daniel Stenberg (4 Dec 2019)
- azure: add more builds
  
  ... removed two from travis (that now runs on azure instead)
  
  Closes #4671

- CURLOPT_VERBOSE.3: see also ERRORBUFFER

- hostip4.c: bump copyright year range

Marcel Raad (3 Dec 2019)
- configure: enable IPv6 support without `getaddrinfo`
  
  This makes it possible to recognize and connect to literal IPv6
  addresses when `getaddrinfo` is not available, which is already the
  case for the CMake build. This affects e.g. classic MinGW because it
  still targets Windows 2000 by default, where `getaddrinfo` is not
  available, but general IPv6 support is.
  
  Instead of checking for `getaddrinfo`, check for `sockaddr_in6` as the
  CMake build does.
  
  Closes https://github.com/curl/curl/pull/4662

- curl_setup: disable IPv6 resolver without `getaddrinfo`
  
  Also, use `CURLRES_IPV6` only for actual DNS resolution, not for IPv6
  address support. This makes it possible to connect to IPv6 literals by
  setting `ENABLE_IPV6` even without `getaddrinfo` support. It also fixes
  the CMake build when using the synchronous resolver without
  `getaddrinfo` support.
  
  Closes https://github.com/curl/curl/pull/4662

Daniel Stenberg (3 Dec 2019)
- github action/azure pipeline: run 'make test-nonflaky' for tests
  
  To match travis and give more info on failures.

- openssl: CURLSSLOPT_NO_PARTIALCHAIN can disable partial cert chains
  
  Closes #4655

- openssl: set X509_V_FLAG_PARTIAL_CHAIN
  
  Have intermediate certificates in the trust store be treated as
  trust-anchors, in the same way as self-signed root CA certificates
  are. This allows users to verify servers using the intermediate cert
  only, instead of needing the whole chain.
  
  Other TLS backends already accept partial chains.
  
  Reported-by: Jeffrey Walton
  Bug: https://curl.haxx.se/mail/lib-2019-11/0094.html

- curl: show better error message when no homedir is found
  
  Reported-by: Vlastimil Ovčáčík
  Fixes #4644
  Closes #4665

- OPENSOCKETFUNCTION.3: correct the purpose description
  
  Reported-by: Jeff Mears
  Bug: https://curl.haxx.se/mail/lib-2019-12/0007.html
  
  Closes #4667

- [Peter Wu brought this change]

  travis: do not use OVERRIDE_CC or OVERRIDE_CXX if empty
  
  Fixes the macOS builds where OVERRIDE_CC and OVERRIDE_CXX are not set.
  
  Reported-by: Jay Satiro
  Fixes #4659
  Closes #4661
  Closes #4664

- azure-pipelines: fix the test script

- Azure Pipelines: initial CI setup
  
  [skip ci]

- docs: add "added: 7.68.0" to the --etag-* docs

- copyright: fix the year ranges for two files
  
  Follow-up to 9c1806ae

Jay Satiro (1 Dec 2019)
- build: Disable Visual Studio warning "conditional expression is constant"
  
  - Disable warning C4127 "conditional expression is constant" globally
    in curl_setup.h for when building with Microsoft's compiler.
  
  This mainly affects building with the Visual Studio project files found
  in the projects dir.
  
  Prior to this change the cmake and winbuild build systems already
  disabled 4127 globally for when building with Microsoft's compiler.
  Also, 4127 was already disabled for all build systems in the limited
  circumstance of the WHILE_FALSE macro which disabled the warning
  specifically for while(0). This commit removes the WHILE_FALSE macro and
  all other cruft in favor of disabling globally in curl_setup.
  
  Background:
  
  We have various macros that cause 0 or 1 to be evaluated, which would
  cause warning C4127 in Visual Studio. For example this causes it:
  
      #define Curl_resolver_asynch() 1
  
  Full behavior is not clearly defined and inconsistent across versions.
  However it is documented that since VS 2015 Update 3 Microsoft has
  addressed this somewhat but not entirely, not warning on while(true) for
  example.
  
  Prior to this change some C4127 warnings occurred when I built with
  Visual Studio using the generated projects in the projects dir.
  
  Closes https://github.com/curl/curl/pull/4658

- openssl: retrieve reported LibreSSL version at runtime
  
  - Retrieve LibreSSL runtime version when supported (>= 2.7.1).
  
  For earlier versions we continue to use the compile-time version.
  
  Ref: https://man.openbsd.org/OPENSSL_VERSION_NUMBER.3
  
  Closes https://github.com/curl/curl/pull/2425

- strerror: Add Curl_winapi_strerror for Win API specific errors
  
  - In all code call Curl_winapi_strerror instead of Curl_strerror when
    the error code is known to be from Windows GetLastError.
  
  Curl_strerror prefers CRT error codes (errno) over Windows API error
  codes (GetLastError) when the two overlap. When we know the error code
  is from GetLastError it is more accurate to prefer the Windows API error
  messages.
  
  Reported-by: Richard Alcock
  
  Fixes https://github.com/curl/curl/issues/4550
  Closes https://github.com/curl/curl/pull/4581

Daniel Stenberg (2 Dec 2019)
- global_init: undo the "intialized" bump in case of failure
  
  ... so that failures in the global init function don't count as a
  working init and it can then be called again.
  
  Reported-by: Paul Groke
  Fixes #4636
  Closes #4653

- parsedate: offer a getdate_capped() alternative
  
  ... and use internally. This function will return TIME_T_MAX instead of
  failure if the parsed data is found to be larger than what can be
  represented. TIME_T_MAX being the largest value curl can represent.
  
  Reviewed-by: Daniel Gustafsson
  Reported-by: JanB on github
  Fixes #4152
  Closes #4651

- docs: add more references to curl_multi_poll
  
  Fixes #4643
  Closes #4652

- sha256: bump the copyright year range
  
  Follow-up from 66e21520f

Daniel Gustafsson (28 Nov 2019)
- curl_setup_once: consistently use WHILE_FALSE in macros
  
  The WHILE_FALSE construction is used to avoid compiler warnings in
  macro constructions. This fixes a few instances where it was not
  used in order to keep the code consistent.
  
  Closes #4649
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Daniel Stenberg (28 Nov 2019)
- [Steve Holme brought this change]

  http_ntlm: Remove duplicate NSS initialisation
  
  Given that this is performed by the NTLM code there is no need to
  perform the initialisation in the HTTP layer. This also keeps the
  initialisation the same as the SASL based protocols and also fixes a
  possible compilation issue if both NSS and SSPI were to be used as
  multiple SSL backends.
  
  Reviewed-by: Kamil Dudka
  Closes #3935

Daniel Gustafsson (28 Nov 2019)
- checksrc: fix regexp for ASSIGNWITHINCONDITION
  
  The regexp looking for assignments within conditions was too greedy
  and matched a too long string in the case of multiple conditionals
  on the same line. This is basically only a problem in single line
  macros, and the code which exemplified this was essentially:
  
    do { if((x) != NULL) { x = NULL; } } while(0)
  
  ..where the final parenthesis of while(0) matched the regexp, and
  the legal assignment in the block triggered the warning. Fix by
  making the regexp less greedy by matching for the tell-tale signs
  of the if statement ending.
  
  Also remove the one occurrence where the warning was disabled due
  to a construction like the above, where the warning didn't apply
  when fixed.
  
  Closes #4647
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Daniel Stenberg (28 Nov 2019)
- RELEASE-NOTES: synced

- [Maros Priputen brought this change]

  curl: two new command line options for etags
  
  --etag-compare and --etag-save
  
  Suggested-by: Paul Hoffman
  Fixes #4277
  Closes #4543

Daniel Gustafsson (28 Nov 2019)
- docs: fix typos

Daniel Stenberg (28 Nov 2019)
- mailmap: Niall O'Reilly's name

- [Niall O'Reilly brought this change]

  doh: use dedicated probe slots
  
  ... to easier allow additional DNS transactions.
  
  Closes #4629

- travis: build ngtcp2 with --enable-lib-only
  
  ... makes it skip the examples and other stuff we don't neeed.
  
  Closes #4646

- [David Benjamin brought this change]

  ngtcp2: fix thread-safety bug in error-handling
  
  ERR_error_string(NULL) should never be called. It places the error in a
  global buffer, which is not thread-safe. Use ERR_error_string_n with a
  local buffer instead.
  
  Closes #4645

- travis: export the CC/CXX variables when set
  
  Suggested-by: Peter Wu
  Fixes #4637
  Closes #4640

Marcel Raad (26 Nov 2019)
- dist: add error-codes.pl
  
  Follow-up to commit 74f441c6d31.
  This should fix test 1175 when run via the daily source tarballs.
  
  Closes https://github.com/curl/curl/pull/4638

Daniel Stenberg (26 Nov 2019)
- [John Schroeder brought this change]

  curl: fix --upload-file . hangs if delay in STDIN
  
  Attempt to unpause a busy read in the CURLOPT_XFERINFOFUNCTION.
  
  When uploading from stdin in non-blocking mode, a delay in reading
  the stream (EAGAIN) causes curl to pause sending data
  (CURL_READFUNC_PAUSE).  Prior to this change, a busy read was
  detected and unpaused only in the CURLOPT_WRITEFUNCTION handler.
  This change performs the same busy read handling in a
  CURLOPT_XFERINFOFUNCTION handler.
  
  Fixes #2051
  Closes #4599
  Reported-by: bdry on github

- [John Schroeder brought this change]

  XFERINFOFUNCTION: support CURL_PROGRESSFUNC_CONTINUE
  
  (also for PROGRESSFUNCTION)
  
  By returning this value from the callback, the internal progress
  function call is still called afterward.
  
  Closes #4599

- [Michael Forney brought this change]

  TLS: add BearSSL vtls implementation
  
  Closes #4597

- curl_multi_wakeup.3: add example and AVAILABILITY
  
  Reviewed-by: Gergely Nagy
  Closes #4635

- [Gergely Nagy brought this change]

  multi: add curl_multi_wakeup()
  
  This commit adds curl_multi_wakeup() which was previously in the TODO
  list under the curl_multi_unblock name.
  
  On some platforms and with some configurations this feature might not be
  available or can fail, in these cases a new error code
  (CURLM_WAKEUP_FAILURE) is returned from curl_multi_wakeup().
  
  Fixes #4418
  Closes #4608

Jay Satiro (24 Nov 2019)
- [Xiaoyin Liu brought this change]

  schannel: fix --tls-max for when min is --tlsv1 or default
  
  Prior to this change schannel ignored --tls-max (CURL_SSLVERSION_MAX_
  macros) when --tlsv1 (CURL_SSLVERSION_TLSv1) or default TLS
  (CURL_SSLVERSION_DEFAULT), using a max of TLS 1.2 always.
  
  Closes https://github.com/curl/curl/pull/4633

- checksrc.bat: Add a check for vquic and vssh directories
  
  Ref: https://github.com/curl/curl/pull/4607

- projects: Fix Visual Studio projects SSH builds
  
  - Generate VQUIC and VSSH filenames in Visual Studio project files.
  
  Prior to this change generated Visual Studio project configurations that
  enabled SSH did not build properly. Broken since SSH files were moved to
  lib/vssh 3 months ago in 5b2d703.
  
  Fixes https://github.com/curl/curl/issues/4492
  Fixes https://github.com/curl/curl/issues/4630
  Closes https://github.com/curl/curl/pull/4607

Daniel Stenberg (23 Nov 2019)
- RELEASE-NOTES: synced

Jay Satiro (22 Nov 2019)
- openssl: Revert to less sensitivity for SYSCALL errors
  
  - Disable the extra sensitivity except in debug builds (--enable-debug).
  
  - Improve SYSCALL error message logic in ossl_send and ossl_recv so that
    "No error" / "Success" socket error text isn't shown on SYSCALL error.
  
  Prior to this change 0ab38f5 (precedes 7.67.0) increased the sensitivity
  of OpenSSL's SSL_ERROR_SYSCALL error so that abrupt server closures were
  also considered errors. For example, a server that does not send a known
  protocol termination point (eg HTTP content length or chunked encoding)
  _and_ does not send a TLS termination point (close_notify alert) would
  cause an error if it closed the connection.
  
  To be clear that behavior made it into release build 7.67.0
  unintentionally. Several users have reported it as an issue.
  
  Ultimately the idea is a good one, since it can help prevent against a
  truncation attack. Other SSL backends may already behave similarly (such
  as Windows native OS SSL Schannel). However much more of our user base
  is using OpenSSL and there is a mass of legacy users in that space, so I
  think that behavior should be partially reverted and then rolled out
  slowly.
  
  This commit changes the behavior so that the increased sensitivity is
  disabled in all curl builds except curl debug builds (DEBUGBUILD). If
  after a period of time there are no major issues then it can be enabled
  in dev and release builds with the newest OpenSSL (1.1.1+), since users
  using the newest OpenSSL are the least likely to have legacy problems.
  
  Bug: https://github.com/curl/curl/issues/4409#issuecomment-555955794
  Reported-by: Bjoern Franke
  
  Fixes https://github.com/curl/curl/issues/4624
  Closes https://github.com/curl/curl/pull/4623

- [Daniel Stenberg brought this change]

  openssl: improve error message for SYSCALL during connect
  
  Reported-by: Paulo Roberto Tomasi
  Bug: https://curl.haxx.se/mail/archive-2019-11/0005.html
  
  Closes https://github.com/curl/curl/pull/4593

Daniel Stenberg (22 Nov 2019)
- test1175: verify symbols-in-versions and libcurl-errors.3 in sync
  
  Closes #4628

- include: make CURLE_HTTP3 use a new error code
  
  To avoid potential issues with error code reuse.
  
  Reported-by: Christoph M. Becker
  Assisted-by: Dan Fandrich
  Fixes #4601
  Closes #4627

- bump: next release will be 7.68.0

- curl: add --parallel-immediate
  
  Starting with this change when doing parallel transfers, without this
  option set, curl will prefer to create new transfers multiplexed on an
  existing connection rather than creating a brand new one.
  
  --parallel-immediate can be set to tell curl to prefer to use new
  connections rather than to wait and try to multiplex.
  
  libcurl-wise, this means that curl will set CURLOPT_PIPEWAIT by default
  on parallel transfers.
  
  Suggested-by: Tom van der Woerdt
  Closes #4500

Daniel Gustafsson (20 Nov 2019)
- [Victor Magierski brought this change]

  docs: fix typos
  
  Change 'experiemental' to 'experimental'.
  
  Closes #4618
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>

Jay Satiro (18 Nov 2019)
- projects: Fix Visual Studio wolfSSL configurations
  
  - s/USE_CYASSL/USE_WOLFSSL/
  
  - Remove old compatibility macros.
  
  Follow-up to 1c6c59a from several months ago when CyaSSL named symbols
  were renamed to wolfSSL. The wolfSSL library was formerly named CyaSSL
  and we kept using their old name for compatibility reasons, until
  earlier this year.

Daniel Stenberg (18 Nov 2019)
- RELEASE-NOTES: synced

- [Javier Blazquez brought this change]

  ngtcp2: use overflow buffer for extra HTTP/3 data
  
  Fixes #4525
  Closes #4603

- altsvc: bump to h3-24
  
  ... as both ngtcp2 and quiche now support that in their master branches
  
  Closes #4604

- ngtcp2: free used resources on disconnect
  
  Fixes #4614
  Closes #4615

- ngtcp2: handle key updates as ngtcp2 master branch tells us
  
  Reviewed-by: Tatsuhiro Tsujikawa
  
  Fixes #4612
  Closes #4613

Jay Satiro (17 Nov 2019)
- [Gergely Nagy brought this change]

  multi: Fix curl_multi_poll wait when extra_fds && !extra_nfds
  
  Prior to this change:
  
  The check if an extra wait is necessary was based not on the
  number of extra fds but on the pointer.
  
  If a non-null pointer was given in extra_fds, but extra_nfds
  was zero, then the wait was skipped even though poll was not
  called.
  
  Closes https://github.com/curl/curl/pull/4610

- lib: Move lib/ssh.h -> lib/vssh/ssh.h
  
  Follow-up to 5b2d703 which moved ssh source files to vssh.
  
  Closes https://github.com/curl/curl/pull/4609

Daniel Stenberg (16 Nov 2019)
- [Andreas Falkenhahn brought this change]

  INSTALL.md: provide Android build instructions
  
  Closes #4606

- [Niall O'Reilly brought this change]

  doh: improced both encoding and decoding
  
  Improved estimation of expected_len and updated related comments;
  increased strictness of QNAME-encoding, adding error detection for empty
  labels and names longer than the overall limit; avoided treating DNAME
  as unexpected;
  
  updated unit test 1655 with more thorough set of proofs and tests
  
  Closes #4598

- ngtcp2: increase QUIC window size when data is consumed
  
  Assisted-by: Javier Blazquez
  Ref #4525 (partial fix)
  Closes #4600

- [Melissa Mears brought this change]

  config-win32: cpu-machine-OS for Windows on ARM
  
  Define the OS macro properly for Windows on ARM builds.  Also, we might
  as well add the GCC-style IA-64 macro.
  
  Closes #4590

- examples: add multi-poll.c
  
  Show how curl_multi_poll() makes it even easier to use the multi
  interface.
  
  Closes #4596

- multi_poll: avoid busy-loop when called without easy handles attached
  
  Fixes #4594
  Closes #4595
  Reported-by: 3dyd on github

- curl: fix -T globbing
  
  Regression from e59371a4936f8 (7.67.0)
  
  Added test 490, 491 and 492 to verify the functionality.
  
  Reported-by: Kamil Dudka
  Reported-by: Anderson Sasaki
  
  Fixes #4588
  Closes #4591

- HISTORY: added cmake, HTTP/3 and parallel downloads with curl

- quiche: reject headers in the wrong order
  
  Pseudo header MUST come before regular headers or cause an error.
  
  Reported-by: Cynthia Coan
  Fixes #4571
  Closes #4584

- openssl: prevent recursive function calls from ctx callbacks
  
  Follow the pattern of many other callbacks.
  
  Ref: #4546
  Closes #4585

- CURL-DISABLE: initial docs for the CURL_DISABLE_* defines
  
  The disable-scan script used in test 1165 is extended to also verify
  that the docs cover all used defines and all defines offered by
  configure.
  
  Reported-by: SLDiggie on github
  Fixes #4545
  Closes #4587

- remove_handle: clear expire timers after multi_done()
  
  Since 59041f0, a new timer might be set in multi_done() so the clearing
  of the timers need to happen afterwards!
  
  Reported-by: Max Kellermann
  Fixes #4575
  Closes #4583

Marcel Raad (10 Nov 2019)
- test1558: use double slash after file:
  
  Classic MinGW / MSYS 1 doesn't support `MSYS2_ARG_CONV_EXCL`, so this
  test unnecessarily failed when using `file:/` instead of `file:///`.
  
  Closes https://github.com/curl/curl/pull/4554

Daniel Stenberg (10 Nov 2019)
- pause: avoid updating socket if done was already called
  
  ... avoids unnecesary recursive risk when the transfer is already done.
  
  Reported-by: Richard Bowker
  Fixes #4563
  Closes #4574

Jay Satiro (9 Nov 2019)
- strerror: Fix an error looking up some Windows error strings
  
  - Use FORMAT_MESSAGE_IGNORE_INSERTS to ignore format specifiers in
    Windows error strings.
  
  Since we are not in control of the error code we don't know what
  information may be needed by the error string's format specifiers.
  
  Prior to this change Windows API error strings which contain specifiers
  (think specifiers like similar to printf specifiers) would not be shown.
  The FormatMessage Windows API call which turns a Windows error code into
  a string could fail and set error ERROR_INVALID_PARAMETER if that error
  string contained a format specifier. FormatMessage expects a va_list for
  the specifiers, unless inserts are ignored in which case no substitution
  is attempted.
  
  Ref: https://devblogs.microsoft.com/oldnewthing/20071128-00/?p=24353

- [r-a-sattarov brought this change]

  system.h: fix for MCST lcc compiler
  
  Fixed build by MCST lcc compiler on MCST Elbrus 2000 architecture and do
  some code cleanup.
  
  e2k (Elbrus 2000) - this is VLIW/EPIC architecture, like Intel Itanium
  architecture.
  
  Ref: https://en.wikipedia.org/wiki/Elbrus_2000
  
  Closes https://github.com/curl/curl/pull/4576

Daniel Stenberg (8 Nov 2019)
- TODO: curl_multi_unblock
  
  Closes #4418

- TODO: Run web-platform-tests url tests
  
  Closes #4477

- TODO: 1.4 alt-svc sharing
  
  Closes #4476

- test1560: require IPv6 for IPv6 aware URL parsing
  
  The URL parser function can't reject a bad IPv6 address properly when
  curl was built without IPv6 support.
  
  Reported-by: Marcel Raad
  Fixes #4556
  Closes #4572

- checksrc: repair the copyrightyear check
  
  - Consider a modified file to be committed this year.
  
  - Make the travis CHECKSRC also do COPYRIGHTYEAR scan in examples and
    includes
  
  - Ignore 0 parents when getting latest commit date of file.
  
  since in the CI we're dealing with a truncated repo of last 50 commits,
  the file's most recent commit may not be available. when this happens
  git log and rev-list show the initial commit (ie first commit not to be
  truncated) but that's incorrect so ignore it.
  
  Ref: https://github.com/curl/curl/pull/4547
  
  Closes https://github.com/curl/curl/pull/4549
  
  Co-authored-by: Jay Satiro

- copyrights: fix copyright year range
  
  .. because checksrc's copyright year check stopped working.
  
  Ref: https://github.com/curl/curl/pull/4547
  
  Closes https://github.com/curl/curl/pull/4549

- RELEASE-NOTES: synced

- curlver: bump to 7.67.1

- mailmap: fixup Massimiliano Fantuzzi

- scripts/contributors: make committers get included too
  
  in addition to authors

Jay Satiro (8 Nov 2019)
- [Massimiliano Fantuzzi brought this change]

  configure: fix typo in help text
  
  Closes https://github.com/curl/curl/pull/4570

Daniel Stenberg (7 Nov 2019)
- [Christian Schmitz brought this change]

  ntlm: USE_WIN32_CRYPTO check removed to get USE_NTLM2SESSION set
  
  Closes #3704

Jay Satiro (6 Nov 2019)
- [Wyatt O'Day brought this change]

  build: fix for CURL_DISABLE_DOH
  
  Fixes https://github.com/curl/curl/issues/4565
  Closes https://github.com/curl/curl/pull/4566

- [Leonardo Taccari brought this change]

  configure: avoid unportable `==' test(1) operator
  
  Closes https://github.com/curl/curl/pull/4567

Version 7.67.0 (5 Nov 2019)

Daniel Stenberg (5 Nov 2019)
- RELEASE-NOTES: synced
  
  The 7.67.0 release

- THANKS: add new names from 7.67.0

- configure: only say ipv6 enabled when the variable is set
  
  Previously it could say "IPv6: enabled" at the end of the configure run
  but the define wasn't set because of a missing getaddrinfo().
  
  Reported-by: Marcel Raad
  Fixes #4555
  Closes #4560

Marcel Raad (2 Nov 2019)
- certs/Server-localhost-lastSAN-sv: regenerate with sha256
  
  All other certificates were regenerated in commit ba782baac30, but
  this one was missed.
  Fixes test3001 on modern systems.
  
  Closes https://github.com/curl/curl/pull/4551

Daniel Stenberg (2 Nov 2019)
- [Vilhelm Prytz brought this change]

  copyrights: update all copyright notices to 2019 on files changed this year
  
  Closes #4547

- [Bastien Bouclet brought this change]

  mbedtls: add error message for cert validity starting in the future
  
  Closes #4552

Jay Satiro (1 Nov 2019)
- schannel_verify: Fix concurrent openings of CA file
  
  - Open the CA file using FILE_SHARE_READ mode so that others can read
    from it as well.
  
  Prior to this change our schannel code opened the CA file without
  sharing which meant concurrent openings (eg an attempt from another
  thread or process) would fail during the time it was open without
  sharing, which in curl's case would cause error:
  "schannel: failed to open CA file".
  
  Bug: https://curl.haxx.se/mail/lib-2019-10/0104.html
  Reported-by: Richard Alcock

Daniel Stenberg (31 Oct 2019)
- gtls: make gnutls_bye() not wait for response on shutdown
  
  ... as it can make it wait there for a long time for no good purpose.
  
  Patched-by: Jay Satiro
  Reported-by: Bylon2 on github
  Adviced-by: Nikos Mavrogiannopoulos
  
  Fixes #4487
  Closes #4541

- [Michał Janiszewski brought this change]

  appveyor: publish artifacts on appveyor
  
  This allows obtaining upstream builds of curl directly from appveyor for
  all the available configurations
  
  Closes #4509

- url: make Curl_close() NULLify the pointer too
  
  This is the common pattern used in the code and by a unified approach we
  avoid mistakes.
  
  Closes #4534

- [Trivikram Kamat brought this change]

  INSTALL: add missing space for configure commands
  
  Closes #4539

- url: Curl_free_request_state() should also free doh handles
  
  ... or risk DoH memory leaks.
  
  Reported-by: Paul Dreik
  Fixes #4463
  Closes #4527

- examples: remove the "this exact code has not been verified"
  
  ... as really confuses the reader to not know what to believe!

- [Trivikram Kamat brought this change]

  HTTP3: fix typo somehere1 > somewhere1
  
  Closes #4535

Jay Satiro (28 Oct 2019)
- [Javier Blazquez brought this change]

  HTTP3: fix invalid use of sendto for connected UDP socket
  
  On macOS/BSD, trying to call sendto on a connected UDP socket fails
  with a EISCONN error. Because the singleipconnect has already called
  connect on the socket when we're trying to use it for QUIC transfers
  we need to use plain send instead.
  
  Fixes #4529
  Closes https://github.com/curl/curl/pull/4533

Daniel Stenberg (28 Oct 2019)
- RELEASE-NOTES: synced

- [Javier Blazquez brought this change]

  HTTP3: fix Windows build
  
  The ngtcp2 QUIC backend was using the MSG_DONTWAIT flag for send/recv
  in order to perform nonblocking operations. On Windows this flag does
  not exist. Instead, the socket must be set to nonblocking mode via
  ioctlsocket.
  
  This change sets the nonblocking flag on UDP sockets used for QUIC on
  all platforms so the use of MSG_DONTWAIT is not needed.
  
  Fixes #4531
  Closes #4532

Marcel Raad (27 Oct 2019)
- appveyor: add --disable-proxy autotools build
  
  This would have caught issue #3926.
  
  Also make formatting more consistent.
  
  Closes https://github.com/curl/curl/pull/4526

Daniel Stenberg (25 Oct 2019)
- appveyor: make winbuilds with DEBUG=no/yes and VS 2015/2017
  
  ... and invoke "curl -V" once done
  
  Co-Authored-By: Jay Satiro
  
  Closes #4523

- [Francois Rivard brought this change]

  schannel: reverse the order of certinfo insertions
  
  Fixes #4518
  Closes #4519

Marcel Raad (24 Oct 2019)
- test1591: fix spelling of http feature
  
  The test never got run because the feature name is `http` in lowercase.
  
  Closes https://github.com/curl/curl/pull/4520

Daniel Stenberg (23 Oct 2019)
- [Michał Janiszewski brought this change]

  appveyor: Use two parallel compilation on appveyor with CMake
  
  Appveyor provides 2 CPUs for each builder[1], make sure to use parallel
  compilation, when running with CMake. CMake learned this new option in
  version 3.12[2] and the version provided by appveyor is fresh enough.
  
  Curl doesn't really take that long to build and it is using the slowest
  builder available, msbuild, so expect only a moderate improvement in
  build times.
  
  [1] https://www.appveyor.com/docs/build-environment/
  [2] https://cmake.org/cmake/help/v3.12/release/3.12.html
  
  Closes #4508

- conn-reuse: requests wanting NTLM can reuse non-NTLM connections
  
  Added test case 338 to verify.
  
  Reported-by: Daniel Silverstone
  Fixes #4499
  Closes #4514

Marcel Raad (23 Oct 2019)
- tests: add missing proxy features

Daniel Stenberg (22 Oct 2019)
- RELEASE-NOTES: synced

Marcel Raad (21 Oct 2019)
- tests: use %FILE_PWD for file:// URLs
  
  This way, we always have exactly one slash after the host name, making
  the tests pass when curl is compiled with the MSYS GCC.
  
  Closes https://github.com/curl/curl/pull/4512

- tests: add `connect to non-listen` keywords
  
  These tests try to connect to ports nothing is listening on.
  
  Closes https://github.com/curl/curl/pull/4511

- runtests: get textaware info from curl instead of perl
  
  The MSYS system on Windows can run the test suite for curl built with
  any toolset. When built with the MSYS GCC, curl uses Unix line endings,
  while it uses Windows line endings when built with the MinGW GCC, and
  `^O` reports 'msys' in both cases. Use the curl executable itself to
  determine the line endings instead, which reports 'x86_64-pc-msys' when
  built with the MSYS GCC.
  
  Closes https://github.com/curl/curl/pull/4506

Daniel Stenberg (20 Oct 2019)
- [Michał Janiszewski brought this change]

  appveyor: Add MSVC ARM64 build
  
  Closes #4507

- http2_recv: a closed stream trumps pause state
  
  ... and thus should return 0, not EAGAIN.
  
  Reported-by: Tom van der Woerdt
  Fixes #4496
  Closes #4505

- http2: expire a timeout at end of stream
  
  To make sure that transfer is being dealt with. Streams without
  Content-Length need a final read to notice the end-of-stream state.
  
  Reported-by: Tom van der Woerdt
  Fixes #4496

Dan Fandrich (18 Oct 2019)
- travis: Add an ARM64 build
  
  Test 323 is failing for some reason, so disable it there for now.

Marcel Raad (18 Oct 2019)
- examples/sslbackend: fix -Wchar-subscripts warning
  
  With the `isdigit` implementation that comes with MSYS2, the argument
  is used as an array subscript, resulting in a -Wchar-subscripts
  warning. `isdigit`'s behavior is undefined if the argument is negative
  and not EOF [0]. As done in lib/curl_ctype.h, cast the `char` variable
  to `unsigned char` to avoid that.
  
  [0] https://en.cppreference.com/w/c/string/byte/isdigit
  
  Closes https://github.com/curl/curl/pull/4503

Daniel Stenberg (18 Oct 2019)
- configure: remove all cyassl references
  
  In particular, this removes the case where configure would find an old
  cyall installation rather than a wolfssl one if present. The library is
  named wolfssl in modern days so there's no real need to keep support for
  the former.
  
  Reported-by: Jacob Barthelmeh
  Closes #4502

Marcel Raad (17 Oct 2019)
- test1162: disable MSYS2's POSIX path conversion
  
  This avoids MSYS2 converting the backslasb in the URL to a slash,
  causing the test to fail.

Daniel Stenberg (17 Oct 2019)
- RELEASE-NOTES: synced

Jay Satiro (16 Oct 2019)
- CURLOPT_TIMEOUT.3: Clarify transfer timeout time includes queue time
  
  Prior to this change some users did not understand that the "request"
  starts when the handle is added to the multi handle, or probably they
  did not understand that some of those transfers may be queued and that
  time is included in timeout.
  
  Reported-by: Jeroen Ooms
  
  Fixes https://github.com/curl/curl/issues/4486
  Closes https://github.com/curl/curl/pull/4489

- [Stian Soiland-Reyes brought this change]

  tool_operate: Fix retry sleep time shown to user when Retry-After
  
  - If server header Retry-After is being used for retry sleep time then
    show that value to the user instead of the normal retry sleep time.
  
  This is a follow-up to 640b973 (7.66.0) which changed curl tool so that
  the value from Retry-After header overrides other retry timing options.
  
  Closes https://github.com/curl/curl/pull/4498

Daniel Stenberg (16 Oct 2019)
- url: normalize CURLINFO_EFFECTIVE_URL
  
  The URL extracted with CURLINFO_EFFECTIVE_URL was returned as given as
  input in most cases, which made it not get a scheme prefixed like before
  if the URL was given without one, and it didn't remove dotdot sequences
  etc.
  
  Added test case 1907 to verify that this now works as intended and as
  before 7.62.0.
  
  Regression introduced in 7.62.0
  
  Reported-by: Christophe Dervieux
  Fixes #4491
  Closes #4493

Marcel Raad (16 Oct 2019)
- tests: line ending fixes for Windows
  
  Mark some files as text.
  
  Closes https://github.com/curl/curl/pull/4490

- tests: use proxy feature
  
  This makes the tests succeed when using --disable-proxy.
  
  Closes https://github.com/curl/curl/pull/4488

- smbserver: fix Python 3 compatibility
  
  Python 2's `ConfigParser` module is spelled `configparser` in Python 3.
  
  Closes https://github.com/curl/curl/pull/4484

- security: silence conversion warning
  
  With MinGW-w64, `curl_socket_t` is is a 32 or 64 bit unsigned integer,
  while `read` expects a 32 bit signed integer.
  Use `sread` instead of `read` to use the correct parameter type.
  
  Closes https://github.com/curl/curl/pull/4483

- connect: silence sign-compare warning
  
  With MinGW-w64 using WinSock, `curl_socklen_t` is signed, while the
  result of `sizeof` is unsigned.
  
  Closes https://github.com/curl/curl/pull/4483

Daniel Stenberg (13 Oct 2019)
- TODO: Handle growing SFTP files
  
  Closes #4344

- KNOWN_BUGS: remove "CURLFORM_CONTENTLEN in an array"
  
  The curl_formadd() function is deprecated and shouldn't be used so the
  real fix for applications is to switch to the curl_mime_* API.

- KNOWN_BUGS: "LDAP on Windows does authentication wrong"
  
  Closes #3116

- appveyor: add a winbuild that uses VS2017
  
  Closes #4482

- [Harry Sintonen brought this change]

  socketpair: fix include and define for older TCP header systems
  
  fixed build for systems that need netinet/in.h for IPPROTO_TCP and are
  missing INADDR_LOOPBACK
  
  Closes #4480

- socketpair: fix double-close in error case
  
  Follow-up to bc2dbef0afc08

- gskit: use the generic Curl_socketpair

- asyn-thread: make use of Curl_socketpair() where available

- socketpair: an implemention for Windows and more
  
  Curl_socketpair() is designed to be used and work everywhere if there's
  no native version or the native version isn't good enough.
  
  Closes #4466

- RELEASE-NOTES: synced

- connect: return CURLE_OPERATION_TIMEDOUT for errno == ETIMEDOUT
  
  Previosly all connect() failures would return CURLE_COULDNT_CONNECT, no
  matter what errno said.
  
  This makes for example --retry work on these transfer failures.
  
  Reported-by: Nathaniel J. Smith
  Fixes #4461
  Clsoes #4462

- cirrus: switch off blackhole status on the freebsd CI machines

- tests: use port 2 instead of 60000 for a safer non-listening port
  
  ... when the tests want "connection refused".

- KNOWN_BUGS: IDN tests failing on Windows
  
  Closes #3747

Dan Fandrich (9 Oct 2019)
- cirrus: Increase the git clone depth.
  
  If more commits are submitted to master between the time of triggering
  the first Cirrus build and the time the final build gets started, the
  desired commit is no longer at HEAD and the build will error out.
  [skip ci]

Daniel Stenberg (9 Oct 2019)
- docs: make sure the --no-progress-meter docs file is in dist too

- docs: document it as --no-progress-meter instead of the reverse
  
  Follow-up to 93373a960c3bb4
  
  Reported-by: infinnovation-dev on github
  Fixes #4474
  Closes #4475

Dan Fandrich (9 Oct 2019)
- cirrus: Switch the FreeBSD 11.x build to 11.3 and add a 13.0 build.
  
  Also, select the images using image_family to get the latest snapshots
  automatically.
  [skip ci]

Daniel Stenberg (8 Oct 2019)
- curl: --no-progress-meter
  
  New option that allows a user to ONLY switch off curl's progress meter
  and leave everything else in "talkative" mode.
  
  Reported-by: Piotr Komborski
  Fixes #4422
  Closes #4470

- TODO: Consult %APPDATA% also for .netrc
  
  Closes #4016

- CURLOPT_TIMEOUT.3: remove the mention of "minutes"
  
  ... just say that limiting operations risk aborting otherwise fine
  working transfers. If that means seconds, minutes or hours, we leave to
  the user.
  
  Reported-by: Martin Gartner
  Closes #4469

- [Andrei Valeriu BICA brought this change]

  docs: added multi-event.c example
  
  Similar to multi-uv.c but using libevent 2. This is a simpler libevent
  integration example then hiperfifo.c.
  
  Closes #4471

Jay Satiro (5 Oct 2019)
- [Nicolas brought this change]

  ldap: fix OOM error on missing query string
  
  - Allow missing queries, don't return NO_MEMORY error in such a case.
  
  It is acceptable for there to be no specified query string, for example:
  
  curl ldap://ldap.forumsys.com
  
  A regression bug in 1b443a7 caused this issue.
  
  This is a partial fix for #4261.
  
  Bug: https://github.com/curl/curl/issues/4261#issuecomment-525543077
  Reported-by: Jojojov@users.noreply.github.com
  Analyzed-by: Samuel Surtees
  
  Closes https://github.com/curl/curl/pull/4467

- [Paul B. Omta brought this change]

  build: Remove unused HAVE_LIBSSL and HAVE_LIBCRYPTO defines
  
  Closes https://github.com/curl/curl/pull/4460

Daniel Stenberg (5 Oct 2019)
- RELEASE-NOTES: synced

- [Stian Soiland-Reyes brought this change]

  curl: ensure HTTP 429 triggers --retry
  
  This completes #3794.
  
  Also make sure the new tests from #4195 are enabled
  
  Closes #4465

Marcel Raad (4 Oct 2019)
- [apique brought this change]

  winbuild: add ENABLE_UNICODE option
  
  Fixes https://github.com/curl/curl/issues/4308
  Closes https://github.com/curl/curl/pull/4309

Daniel Stenberg (4 Oct 2019)
- ngtcp2: adapt to API change
  
  Closes #4457

- cookies: change argument type for Curl_flush_cookies
  
  The second argument is really a 'bool' so use that and pass in TRUE/FALSE
  to make it clear.
  
  Closes #4455

- http2: move state-init from creation to pre-transfer
  
  To make sure that the HTTP/2 state is initialized correctly for
  duplicated handles. It would otherwise easily generate "spurious"
  PRIORITY frames to get sent over HTTP/2 connections when duplicated easy
  handles were used.
  
  Reported-by: Daniel Silverstone
  Fixes #4303
  Closes #4442

- urlapi: fix use-after-free bug
  
  Follow-up from 2c20109a9b5d04
  
  Added test 663 to verify.
  
  Reported by OSS-Fuzz
  Bug: https://crbug.com/oss-fuzz/17954
  
  Closes #4453

- [Paul Dreik brought this change]

  cookie: avoid harmless use after free
  
  This fix removes a use after free which can be triggered by
  the internal cookie fuzzer, but otherwise is probably
  impossible to trigger from an ordinary application.
  
  The following program reproduces it:
  
          curl_global_init(CURL_GLOBAL_DEFAULT);
          CURL*  handle=curl_easy_init();
          CookieInfo* info=Curl_cookie_init(handle,NULL,NULL,false);
          curl_easy_setopt(handle, CURLOPT_COOKIEJAR, "/dev/null");
          Curl_flush_cookies(handle, true);
          Curl_cookie_cleanup(info);
          curl_easy_cleanup(handle);
          curl_global_cleanup();
  
  This was found through fuzzing.
  
  Closes #4454

- [Denis Chaplygin brought this change]

  docs: add note on failed handles not being counted by curl_multi_perform
  
  Closes #4446

- CURLMOPT_MAX_CONCURRENT_STREAMS.3: fix SEE ALSO typo

- [Niall O'Reilly brought this change]

  ESNI: initial build/setup
  
  Closes #4011

- RELEASE-NOTES: synced

- redirect: when following redirects to an absolute URL, URL encode it
  
  ... to make it handle for example (RFC violating) embeded spaces.
  
  Reported-by: momala454 on github
  Fixes #4445
  Closes #4447

- urlapi: fix URL encoding when setting a full URL

- tool_operate: rename functions to make more sense

- curl: create easy handles on-demand and not ahead of time
  
  This should again enable crazy-large download ranges of the style
  [1-10000000] that otherwise easily ran out of memory starting in 7.66.0
  when this new handle allocating scheme was introduced.
  
  Reported-by: Peter Sumatra
  Fixes #4393
  Closes #4438

- [Kunal Ekawde brought this change]

  CURLMOPT_MAX_CONCURRENT_STREAMS: new setopt
  
  Closes #4410

- chunked-encoding: stop hiding the CURLE_BAD_CONTENT_ENCODING error
  
  Unknown content-encoding would get returned as CURLE_WRITE_ERROR if the
  response is chunked-encoded.
  
  Reported-by: Ilya Kosarev
  Fixes #4310
  Closes #4449

Marcel Raad (1 Oct 2019)
- checksrc: fix uninitialized variable warning
  
  The loop doesn't need to be executed without a file argument.
  
  Closes https://github.com/curl/curl/pull/4444

- urlapi: fix unused variable warning
  
  `dest` is only used with `ENABLE_IPV6`.
  
  Closes https://github.com/curl/curl/pull/4444

- lib: silence conversion warnings
  
  Closes https://github.com/curl/curl/pull/4444

- AppVeyor: add 32-bit MinGW-w64 build
  
  With WinSSL and testing enabled so that it would have detected most of
  the warnings fixed in [0] and [1].
  
  [0] https://github.com/curl/curl/pull/4398
  [1] https://github.com/curl/curl/pull/4415
  
  Closes https://github.com/curl/curl/pull/4433

- AppVeyor: remove MSYS2_ARG_CONV_EXCL for winbuild
  
  It's only used for MSYS2 with MinGW.
  
  Closes

Daniel Stenberg (30 Sep 2019)
- [Emil Engler brought this change]

  git: add tests/server/disabled to .gitignore
  
  Closes #4441

- altsvc: accept quoted ma and persist values
  
  As mandated by the spec. Test 1654 is extended to verify.
  
  Closes #4443

- mailmap: a Lucas fix

Alessandro Ghedini (29 Sep 2019)
- [Lucas Pardue brought this change]

  quiche: update HTTP/3 config creation to new API

Daniel Stenberg (29 Sep 2019)
- BINDINGS: PureBasic, Net::Curl for perl and Nim

- BINDINGS: Kapito is an Erlang library, basically a binding

- BINDINGS: added clj-curl
  
  Reported-by: Lucas Severo

- [Jay Satiro brought this change]

  docs: disambiguate CURLUPART_HOST is for host name (ie no port)
  
  Closes #4424

- cookies: using a share with cookies shouldn't enable the cookie engine
  
  The 'share object' only sets the storage area for cookies. The "cookie
  engine" still needs to be enabled or activated using the normal cookie
  options.
  
  This caused the curl command line tool to accidentally use cookies
  without having been told to, since curl switched to using shared cookies
  in 7.66.0.
  
  Test 1166 verifies
  
  Updated test 506
  
  Fixes #4429
  Closes #4434

- setopt: handle ALTSVC set to NULL

- RELEASE-NOTES: synced

- [grdowns brought this change]

  INSTALL: add vcpkg installation instructions
  
  Closes #4435

- [Zenju brought this change]

  FTP: add test for FTPFILE_NOCWD: Avoid redundant CWDs
  
  Add libtest 661
  
  Closes #4417

- [Zenju brought this change]

  FTP: url-decode path before evaluation
  
  Closes #4428

Marcel Raad (27 Sep 2019)
- tests: fix narrowing conversion warnings
  
  `timediff_t` is 64 bits wide also on 32-bit systems since
  commit b1616dad8f0.
  
  Closes https://github.com/curl/curl/pull/4415

Jay Satiro (27 Sep 2019)
- [julian brought this change]

  vtls: Fix comment typo about macosx-version-min compiler flag
  
  Closes https://github.com/curl/curl/pull/4425

Daniel Stenberg (26 Sep 2019)
- [Yechiel Kalmenson brought this change]

  README: minor grammar fix
  
  Closes #4431

- [Spezifant brought this change]

  HTTP3: fix prefix parameter for ngtcp2 build
  
  Closes #4430

- quiche: don't close connection at end of stream!

- quiche: set 'drain' when returning without having drained the queues

- Revert "FTP: url-decode path before evaluation"
  
  This reverts commit 2f036a72d543e96128bd75cb0fedd88815fd42e2.

- HTTP3: merged and simplified the two 'running' sections

- HTTP3: show an --alt-svc using example too

- [Zenju brought this change]

  FTP: url-decode path before evaluation
  
  Closes #4423

- openssl: use strerror on SSL_ERROR_SYSCALL
  
  Instead of showing the somewhat nonsensical errno number, use strerror()
  to provide a more relatable error message.
  
  Closes #4411

- HTTP3: update quic.aiortc.org + add link to server list
  
  Reported-by: Jeremy Lainé

Jay Satiro (26 Sep 2019)
- url: don't set appconnect time for non-ssl/non-ssh connections
  
  Prior to this change non-ssl/non-ssh connections that were reused set
  TIMER_APPCONNECT [1]. Arguably that was incorrect since no SSL/SSH
  handshake took place.
  
  [1]: TIMER_APPCONNECT is publicly known as CURLINFO_APPCONNECT_TIME in
  libcurl and %{time_appconnect} in the curl tool. It is documented as
  "the time until the SSL/SSH handshake is completed".
  
  Reported-by: Marcel Hernandez
  
  Ref: https://github.com/curl/curl/issues/3760
  
  Closes https://github.com/curl/curl/pull/3773

Daniel Stenberg (25 Sep 2019)
- ngtcp2: remove fprintf() calls
  
  - convert some of them to H3BUF() calls to infof()
  - remove some of them completely
  - made DEBUG_HTTP3 defined only if CURLDEBUG is set for now
  
  Closes #4421

- [Jay Satiro brought this change]

  url: fix the NULL hostname compiler warning case
  
  Closes #4403

- [Jay Satiro brought this change]

  travis: move the go install to linux-only
  
  ... to repair the build again
  Closes #4403

- altsvc: correct the #ifdef for the ngtcp2 backend

- altsvc: save h3 as h3-23
  
  Follow-up to d176a2c7e5

- urlapi: question mark within fragment is still fragment
  
  The parser would check for a query part before fragment, which caused it
  to do wrong when the fragment contains a question mark.
  
  Extended test 1560 to verify.
  
  Reported-by: Alex Konev
  Fixes #4412
  Closes #4413

- [Alex Samorukov brought this change]

  HTTP3.md: move -p for mkdir, remove -j for make
  
  - mkdir on OSX/Darwin requires `-p` argument before dir
  
  - portabbly figuring out number of cores is an exercise for somewhere
    else
  
  Closes #4407

Patrick Monnerat (24 Sep 2019)
- os400: getpeername() and getsockname() return ebcdic AF_UNIX sockaddr,
  
  As libcurl now uses these 2 system functions, wrappers are needed on os400
  to convert returned AF_UNIX sockaddrs to ascii.
  
  This is a follow-up to commit 7fb54ef.
  See also #4037.
  Closes #4214

Jay Satiro (24 Sep 2019)
- [Lucas Pardue brought this change]

  strcase: fix raw lowercasing the letter X
  
  Casing mistake in Curl_raw_tolower 'X' wasn't lowercased as 'x' prior to
  this change.
  
  Follow-up to 0023fce which added the function several days ago.
  
  Ref: https://github.com/curl/curl/pull/4401#discussion_r327396546
  
  Closes https://github.com/curl/curl/pull/4408

Daniel Stenberg (23 Sep 2019)
- http2: Expression 'stream->stream_id != - 1' is always true
  
  PVS-Studio warning
  Fixes #4402

- http2: A value is being subtracted from the unsigned variable
  
  PVS-Studio warning
  Fixes #4402

- libssh: part of conditional expression is always true: !result
  
  PVS-Studio warning
  Fixed #4402

- libssh: part of conditional expression is always true
  
  PVS-Studio warning
  Fixes #4402

- libssh: The expression is excessive or contains a misprint
  
  PVS-Studio warning
  Fixes #4402

- quiche: The expression must be surrounded by parentheses
  
  PVS-Studio warning
  Fixes #4402

- vauth: The parameter 'status' must be surrounded by parentheses
  
  PVS-Studio warning
  Fixes #4402

- [Paul Dreik brought this change]

  doh: allow only http and https in debug mode
  
  Otherwise curl may be told to use for instance pop3 to
  communicate with the doh server, which most likely
  is not what you want.
  
  Found through fuzzing.
  
  Closes #4406

- [Paul Dreik brought this change]

  doh: return early if there is no time left
  
  Closes #4406

- [Barry Pollard brought this change]

  http: lowercase headernames for HTTP/2 and HTTP/3
  
  Closes #4401
  Fixes #4400

Marcel Raad (23 Sep 2019)
- vtls: fix narrowing conversion warnings
  
  Curl_timeleft returns `timediff_t`, which is 64 bits wide also on
  32-bit systems since commit b1616dad8f0.
  
  Closes https://github.com/curl/curl/pull/4398

Daniel Stenberg (23 Sep 2019)
- [Joel Depooter brought this change]

  winbuild: Add manifest to curl.exe for proper OS version detection
  
  This is a small fix to commit ebd213270a017a6830928ee2e1f4a9cabc799898
  in pull request #1221. That commit added the CURL_EMBED_MANIFEST flag to
  CURL_RC_FLAGS. However, later in the file CURL_RC_FLAGS is
  overwritten. The fix is to append values to CURL_RC_FLAGS instead of
  overwriting
  
  Closes #4399

- RELEASE-NOTES: synced

Marcel Raad (22 Sep 2019)
- openssl: fix compiler warning with LibreSSL
  
  It was already fixed for BoringSSL in commit a0f8fccb1e0.
  LibreSSL has had the second argument to SSL_CTX_set_min_proto_version
  as uint16_t ever since the function was added in [0].
  
  [0] https://github.com/libressl-portable/openbsd/commit/56f107201baefb5533486d665a58d8f57fd3aeda
  
  Closes https://github.com/curl/curl/pull/4397

Daniel Stenberg (22 Sep 2019)
- curl: exit the create_transfers loop on errors
  
  When looping around the ranges and given URLs to create transfers, all
  errors should exit the loop and return. Previously it would keep
  looping.
  
  Reported-by: SumatraPeter on github
  Bug: #4393
  Closes #4396

Jay Satiro (21 Sep 2019)
- socks: Fix destination host shown on SOCKS5 error
  
  Prior to this change when a server returned a socks5 connect error then
  curl would parse the destination address:port from that data and show it
  to the user as the destination:
  
  curld -v --socks5 10.0.3.1:1080 http://google.com:99
  * SOCKS5 communication to google.com:99
  * SOCKS5 connect to IPv4 172.217.12.206 (locally resolved)
  * Can't complete SOCKS5 connection to 253.127.0.0:26673. (1)
  curl: (7) Can't complete SOCKS5 connection to 253.127.0.0:26673. (1)
  
  That's incorrect because the address:port included in the connect error
  is actually a bind address:port (typically unused) and not the
  destination address:port. This fix changes curl to show the destination
  information that curl sent to the server instead:
  
  curld -v --socks5 10.0.3.1:1080 http://google.com:99
  * SOCKS5 communication to google.com:99
  * SOCKS5 connect to IPv4 172.217.7.14:99 (locally resolved)
  * Can't complete SOCKS5 connection to 172.217.7.14:99. (1)
  curl: (7) Can't complete SOCKS5 connection to 172.217.7.14:99. (1)
  
  curld -v --socks5-hostname 10.0.3.1:1080 http://google.com:99
  * SOCKS5 communication to google.com:99
  * SOCKS5 connect to google.com:99 (remotely resolved)
  * Can't complete SOCKS5 connection to google.com:99. (1)
  curl: (7) Can't complete SOCKS5 connection to google.com:99. (1)
  
  Ref: https://tools.ietf.org/html/rfc1928#section-6
  
  Closes https://github.com/curl/curl/pull/4394

Daniel Stenberg (21 Sep 2019)
- travis: enable ngtcp2 h3-23 builds

- altsvc: both backends run h3-23 now
  
  Closes #4395

- http: fix warning on conversion from int to bit
  
  Follow-up from 03ebe66d70

- urldata: use 'bool' for the bit type on MSVC compilers
  
  Closes #4387
  Fixes #4379

- appveyor: upgrade VS2017 to VS2019
  
  Closes #4383

- [Zenju brought this change]

  FTP: FTPFILE_NOCWD: avoid redundant CWDs
  
  Closes #4382

- cookie: pass in the correct cookie amount to qsort()
  
  As the loop discards cookies without domain set. This bug would lead to
  qsort() trying to sort uninitialized pointers. We have however not found
  it a security problem.
  
  Reported-by: Paul Dreik
  Closes #4386

- [Paul Dreik brought this change]

  urlapi: avoid index underflow for short ipv6 hostnames
  
  If the input hostname is "[", hlen will underflow to max of size_t when
  it is subtracted with 2.
  
  hostname[hlen] will then cause a warning by ubsanitizer:
  
  runtime error: addition of unsigned offset to 0x<snip> overflowed to
  0x<snip>
  
  I think that in practice, the generated code will work, and the output
  of hostname[hlen] will be the first character "[".
  
  This can be demonstrated by the following program (tested in both clang
  and gcc, with -O3)
  
  int main() {
    char* hostname=strdup("[");
    size_t hlen = strlen(hostname);
  
    hlen-=2;
    hostname++;
    printf("character is %d\n",+hostname[hlen]);
    free(hostname-1);
  }
  
  I found this through fuzzing, and even if it seems harmless, the proper
  thing is to return early with an error.
  
  Closes #4389

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: compile with latest ngtcp2 + nghttp3 draft-23
  
  Closes #4392

- THANKS-filter: deal with my typos 'Jat' => 'Jay'

- travis: use go master
  
  ... as the boringssl builds needs a very recent version
  
  Co-authored-by: Jat Satiro
  Closes #4361

- tool_operate: removed unused variable 'done'
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- tool_operate: Expression 'config->resume_from' is always true
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- tool_getparam: remove duplicate switch case
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- libssh2: part of conditional expression is always true: !result
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- urlapi: Expression 'storep' is always true
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- urlapi: 'scheme' is always true
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- urlapi: part of conditional expression is always true: (relurl[0] == '/')
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- setopt: store CURLOPT_RTSP_SERVER_CSEQ correctly
  
  Fixes bug detected by PVS-Studio
  Fixes #4374

- mime: make Curl_mime_duppart() assert if called without valid dst
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- http_proxy: part of conditional expression is always true: !error
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- imap: merged two case-branches performing the same action
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- multi: value '2L' is assigned to a boolean
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- easy: part of conditional expression is always true: !result
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- netrc: part of conditional expression is always true: !done
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- version: Expression 'left > 1' is always true
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- url: remove dead code
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- url: part of expression is always true: (bundle->multiuse == 0)
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- ftp: the conditional expression is always true
  
  ... both !result and (ftp->transfer != FTPTRANSFER_BODY)!
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- ftp: Expression 'ftpc->wait_data_conn' is always false
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- ftp: Expression 'ftpc->wait_data_conn' is always true
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- ftp: part of conditional expression is always true: !result
  
  Fixes warning detected by PVS-Studio
  Fixes #4374

- http: fix Expression 'http->postdata' is always false
  
  Fixes warning detected by PVS-Studio
  Fixes #4374
  Reported-by: Valerii Zapodovnikov

- [Niall O'Reilly brought this change]

  doh: avoid truncating DNS QTYPE to lower octet
  
  Closes #4381

- [Jens Finkhaeuser brought this change]

  urlapi: CURLU_NO_AUTHORITY allows empty authority/host part
  
  CURLU_NO_AUTHORITY is intended for use with unknown schemes (i.e. not
  "file:///") to override cURL's default demand that an authority exists.
  
  Closes #4349

- version: next release will be 7.67.0

- RELEASE-NOTES: synced

- url: only reuse TLS connections with matching pinning
  
  If the requests have different CURLOPT_PINNEDPUBLICKEY strings set, the
  connection should not be reused.
  
  Bug: https://curl.haxx.se/mail/lib-2019-09/0061.html
  Reported-by: Sebastian Haglund
  
  Closes #4347

- README: add OSS-Fuzz badge [skip ci]
  
  Closes #4380

Michael Kaufmann (18 Sep 2019)
- http: merge two "case" statements

Daniel Stenberg (18 Sep 2019)
- [Zenju brought this change]

  FTP: remove trailing slash from path for LIST/MLSD
  
  Closes #4348

- mime: when disabled, avoid C99 macro
  
  Closes #4368

- url: cleanup dangling DOH request headers too
  
  Follow-up to 9bc44ff64d9081
  
  Credit to OSS-Fuzz
  Bug: https://crbug.com/oss-fuzz/17269
  
  Closes #4372

- [Christoph M. Becker brought this change]

  http2: relax verification of :authority in push promise requests
  
  If the :authority pseudo header field doesn't contain an explicit port,
  we assume it is valid for the default port, instead of rejecting the
  request for all ports.
  
  Ref: https://curl.haxx.se/mail/lib-2019-09/0041.html
  
  Closes #4365

- doh: clean up dangling DOH handles and memory on easy close
  
  If you set the same URL for target as for DoH (and it isn't a DoH
  server), like "https://example.com" in both, the easy handles used for
  the DoH requests could be left "dangling" and end up not getting freed.
  
  Reported-by: Paul Dreik
  Closes #4366

- unit1655: make it C90 compliant
  
  Unclear why this was not detected in the CI.
  
  Follow-up to b7666027296a

- smb: check for full size message before reading message details
  
  To avoid reading of uninitialized data.
  
  Assisted-by: Max Dymond
  Bug: https://crbug.com/oss-fuzz/16907
  Closes #4363

- quiche: persist connection details
  
  ... like we do for other protocols at connect time. This makes "curl -I"
  and other things work.
  
  Reported-by: George Liu
  Fixes #4358
  Closes #4360

- openssl: fix warning with boringssl and SSL_CTX_set_min_proto_version
  
  Follow-up to ffe34b7b59
  Closes #4359

- [Paul Dreik brought this change]

  doh: fix undefined behaviour and open up for gcc and clang optimization
  
  The undefined behaviour is annoying when running fuzzing with
  sanitizers. The codegen is the same, but the meaning is now not up for
  dispute. See https://cppinsights.io/s/516a2ff4
  
  By incrementing the pointer first, both gcc and clang recognize this as
  a bswap and optimizes it to a single instruction.  See
  https://godbolt.org/z/994Zpx
  
  Closes #4350

- [Paul Dreik brought this change]

  doh: fix (harmless) buffer overrun
  
  Added unit test case 1655 to verify.
  Close #4352
  
  the code correctly finds the flaws in the old code,
  if one temporarily restores doh.c to the old version.

Alessandro Ghedini (15 Sep 2019)
- docs: remove trailing ':' from section names in CURLOPT_TRAILER* man

- docs: fix typo in CURLOPT_HTTP_VERSION man

GitHub (14 Sep 2019)
- [Daniel Stenberg brought this change]

  CI: inintial github action job
  
  First shot at a CI build on github actions

Daniel Stenberg (13 Sep 2019)
- appveyor: add a winbuild
  
  Assisted-by: Marcel Raad
  Assisted-by: Jay Satiro
  
  Closes #4324

- FTP: allow "rubbish" prepended to the SIZE response
  
  This is a protocol violation but apparently there are legacy proprietary
  servers doing this.
  
  Added test 336 and 337 to verify.
  
  Reported-by: Philippe Marguinaud
  Closes #4339

- [Zenju brought this change]

  FTP: skip CWD to entry dir when target is absolute
  
  Closes #4332

Kamil Dudka (13 Sep 2019)
- curl: fix memory leaked by parse_metalink()
  
  This commit fixes a regression introduced by curl-7_65_3-5-gb88940850.
  Detected by tests 2005, 2008, 2009, 2010, 2011, and 2012 with valgrind
  and libmetalink enabled.
  
  Closes #4326

Daniel Stenberg (13 Sep 2019)
- parsedate: still provide the name arrays when disabled
  
  If FILE or FTP are enabled, since they also use them!
  
  Reported-by: Roland Hieber
  Fixes #4325
  Closes #4343

- [Gilles Vollant brought this change]

  curl:file2string: load large files much faster
  
  ... by using a more efficient realloc scheme.
  
  Bug: https://curl.haxx.se/mail/lib-2019-09/0045.html
  Closes #4336

- openssl: close_notify on the FTP data connection doesn't mean closure
  
  For FTPS transfers, curl gets close_notify on the data connection
  without that being a signal to close the control connection!
  
  Regression since 3f5da4e59a556fc (7.65.0)
  
  Reported-by: Zenju on github
  Reviewed-by: Jay Satiro
  Fixes #4329
  Closes #4340

- [Jimmy Gaussen brought this change]

  docs/HTTP3: fix `--with-ssl` ngtcp2 configure flag
  
  Closes #4338

- RELEASE-NOTES: synced

- curlver: bump to 7.66.1

- [Zenju brought this change]

  setopt: make it easier to add new enum values
  
  ... by using the *_LAST define names better.
  
  Closes #4321

- asyn-thread: s/AF_LOCAL/AF_UNIX for Solaris
  
  Reported-by: Dagobert Michelsen
  Fixes #4328
  Closes #4333

- [Bernhard Walle brought this change]

  winbuild/MakefileBuild.vc: Add vssh
  
  Without that modification, the Windows build using the makefiles doesn't
  work.
  
  Signed-off-by: Bernhard Walle <bernhard.walle@posteo.eu>
  
  Fixes #4322
  Closes #4323

Bernhard Walle (11 Sep 2019)
- winbuild/MakefileBuild.vc: Fix line endings
  
  The file had mixed line endings.
  
  Signed-off-by: Bernhard Walle <bernhard.walle@posteo.eu>

Jay Satiro (11 Sep 2019)
- ldap: Stop using wide char version of ldapp_err2string
  
  Despite ldapp_err2string being documented by MS as returning a
  PCHAR (char *), when UNICODE it is mapped to ldap_err2stringW and
  returns PWCHAR (wchar_t *).
  
  We have lots of code that expects ldap_err2string to return char *,
  most of it failf used like this:
  
  failf(data, "LDAP local: Some error: %s", ldap_err2string(rc));
  
  Closes https://github.com/curl/curl/pull/4272

Version 7.66.0 (10 Sep 2019)

Daniel Stenberg (10 Sep 2019)
- RELEASE-NOTES: curl 7.66.0

- THANKS: from the 7.66.0 release

- curl: make sure the parallel transfers do them all
  
  The logic could erroneously break the loop too early before all
  transfers had been transferred.
  
  Reported-by: Tom van der Woerdt
  Fixes #4316
  Closes #4317

- urlapi: one colon is enough for the strspn() input (typo)

- urlapi: verify the IPv6 numerical address
  
  It needs to parse correctly. Otherwise it could be tricked into letting
  through a-f using host names that libcurl would then resolve. Like
  '[ab.be]'.
  
  Reported-by: Thomas Vegas
  Closes #4315

- [Clément Notin brought this change]

  openssl: use SSL_CTX_set_<min|max>_proto_version() when available
  
  OpenSSL 1.1.0 adds SSL_CTX_set_<min|max>_proto_version() that we now use
  when available.  Existing code is preserved for older versions of
  OpenSSL.
  
  Closes #4304

- [Clément Notin brought this change]

  openssl: indent, re-organize and add comments

- [migueljcrum brought this change]

  sspi: fix memory leaks
  
  Closes #4299

- travis: disable ngtcp2 builds (again)

- Curl_fillreadbuffer: avoid double-free trailer buf on error
  
  Reviewed-by: Jay Satiro
  Reported-by: Thomas Vegas
  
  Closes #4307

- tool_setopt: handle a libcurl build without netrc support
  
  Reported-by: codesniffer13 on github
  Fixes #4302
  Closes #4305

- security:read_data fix bad realloc()
  
  ... that could end up a double-free
  
  CVE-2019-5481
  Bug: https://curl.haxx.se/docs/CVE-2019-5481.html

- [Thomas Vegas brought this change]

  tftp: Alloc maximum blksize, and use default unless OACK is received
  
  Fixes potential buffer overflow from 'recvfrom()', should the server
  return an OACK without blksize.
  
  Bug: https://curl.haxx.se/docs/CVE-2019-5482.html
  CVE-2019-5482

- [Thomas Vegas brought this change]

  tftp: return error when packet is too small for options

- KNOWN_BUGS/TODO: cleanup and remove outdated issues

- RELEASE-NOTES: synced

- netrc: free 'home' on error
  
  Follow-up to f9c7ba9096ec2
  
  Coverity CID 1453474
  
  Closes #4291

- urldata: avoid 'generic', use dedicated pointers
  
  For the 'proto' union within the connectdata struct.
  
  Closes #4290

- cleanup: move functions out of url.c and make them static
  
  Closes #4289

- smtp: check for and bail out on too short EHLO response
  
  Otherwise, a three byte response would make the smtp_state_ehlo_resp()
  function misbehave.
  
  Credit to OSS-Fuzz
  Bug: https://crbug.com/oss-fuzz/16918
  
  Assisted-by: Max Dymond
  
  Closes #4287

- smb: init *msg to NULL in smb_send_and_recv()
  
  ... it might otherwise return OK from this function leaving that pointer
  uninitialized.
  
  Bug: https://crbug.com/oss-fuzz/16907
  
  Closes #4286

- ROADMAP: updated after recent user poll
  
  In rough prio order

- THANKS: remove duplicate

- Curl_addr2string: take an addrlen argument too
  
  This allows the function to figure out if a unix domain socket has a
  file name or not associated with it! When a socket is created with
  socketpair(), as done in the fuzzer testing, the path struct member is
  uninitialized and must not be accessed.
  
  Bug: https://crbug.com/oss-fuzz/16699
  
  Closes #4283

- [Rolf Eike Beer brought this change]

  CMake: remove needless newlines at end of gss variables

- [Rolf Eike Beer brought this change]

  CI: remove duplicate configure flag for LGTM.com

- [Rolf Eike Beer brought this change]

  CMake: use platform dependent name for dlopen() library
  
  Closes #4279

- quiche: expire when poll returned data
  
  ... to make sure we continue draining the queue until empty
  
  Closes #4281

- quiche: decrease available buffer size, don't assign it!
  
  Found-by: Jeremy Lainé

- RELEASE-NOTES: synced

- [Kyohei Kadota brought this change]

  curl: fix include conditions

- [Kyohei Kadota brought this change]

  plan9: fix installation instructions
  
  Closes #4276

- ngtcp2: on h3 stream close, call expire
  
  ... to trigger a new read to detect the stream close!
  
  Closes #4275

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: build latest ngtcp2 and ngtcp2_crypto_openssl
  
  Closes #4278

- ngtcp2: set flow control window to stream buffer size
  
  Closes #4274

- [Christopher Head brought this change]

  CURLOPT_HEADERFUNCTION.3: clarify
  
  Closes #4273

- CURLINFO docs: mention that in redirects times are added
  
  Suggested-by: Brandon Dong
  Fixes #4250
  Closes #4269

- travis: enable ngtcp2 builds again
  
  Switched to the openssl-quic-draft-22 openssl branch.
  
  Closes #4271

- HTTP3: switched openssl branch to use

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: Build with latest ngtcp2 and ngtcp2_crypto_openssl
  
  Closes #4270

- http2: when marked for closure and wanted to close == OK
  
  It could otherwise return an error even when closed correctly if GOAWAY
  had been received previously.
  
  Reported-by: Tom van der Woerdt
  Fixes #4267
  Closes #4268

- RELEASE-NOTES: synced

- build-openssl: fix build with Visual Studio 2019
  
  Reviewed-by: Marcel Raad
  Contributed-by: osabc on github
  Fixes #4188
  Closes #4266

Kamil Dudka (26 Aug 2019)
- vauth: return CURLE_AUTH_ERROR on gss_init_sec_context() failure
  
  This is a follow-up to https://github.com/curl/curl/pull/3864 .
  
  Closes #4224

Daniel Stenberg (26 Aug 2019)
- KNOWN_BUGS: USE_UNIX_SOCKETS on Windows
  
  Closes #4040

- quiche: send the HTTP body correctly on callback uploads
  
  Closes #4265

- travis: disable ngtcp2 builds (temporarily)
  
  Just too many API changes right now
  
  Closes #4264

- ngtcp2: add support for SSLKEYLOGFILE
  
  Closes #4260

- ngtcp2: improve h3 response receiving
  
  Closes #4259

- ngtcp2: use nghttp3_version()

- ngtcp2: sync with upstream API changes
  
  Assisted-by: Tatsuhiro Tsujikawa

- [Kyle Abramowitz brought this change]

  scp: fix directory name length used in memcpy
  
  Fix read off end of array due to bad pointer math in getworkingpath for
  SCP home directory case.
  
  Closes #4258

- http: the 'closed' struct field is used by both ngh2 and ngh3
  
  and remove 'header_recvbuf', not used for anything
  
  Reported-by: Jeremy Lainé
  
  Closes #4257

- ngtcp2: accept upload via callback
  
  Closes #4256

- defines: avoid underscore-prefixed defines
  
  Double-underscored or underscore plus uppercase letter at least.
  
  ... as they're claimed to be reserved.
  
  Reported-by: patnyb on github
  
  Fixes #4254
  Closes #4255

- travis: add a build using ngtcp2 + nghttp3 (and a patched OpenSSL)
  
  Runs no tests
  
  Closes #4253

- travis: bump to using nghttp2 version 1.39.2
  
  Closes #4252

- [Gisle Vanem brought this change]

  docs/examples/curlx: fix errors
  
  Initialise 'mimetype' and require the -p12 arg.
  
  Closes #4248

- cleanup: remove DOT_CHAR completely
  
  Follow-up to f9c7ba9096ec
  
  The use of DOT_CHAR for ".ssh" was probably a mistake and is removed
  now.
  
  Pointed-out-by: Gisle Vanem
  Bug: https://github.com/curl/curl/pull/4230#issuecomment-522960638
  
  Closes #4247

- spnego_sspi: add typecast to fix build warning
  
  Reported in build "Win32 target on Debian Stretch (64-bit) -
  i686-w64-mingw32 - gcc-20170516"
  
  Closes #4245

- openssl: build warning free with boringssl
  
  Closes #4244

- curl: make --libcurl use CURL_HTTP_VERSION_3
  
  Closes #4243

- ngtcp2: make postfields-set posts work
  
  Closes #4242

- http: remove chunked-encoding and expect header use for HTTP/3

- [Alessandro Ghedini brought this change]

  configure: use pkg-config to detect quiche
  
  This removes the need to hard-code the quiche target path in
  configure.ac.
  
  This depends on https://github.com/cloudflare/quiche/pull/128
  
  Closes #4237

- CURLOPT_SSL_VERIFYHOST: treat the value 1 as 2
  
  For a long time (since 7.28.1) we've returned error when setting the
  value to 1 to make applications notice that we stopped supported the old
  behavior for 1. Starting now, we treat 1 and 2 exactly the same.
  
  Closes #4241

- curl: use .curlrc (with a dot) on Windows as well
  
  Fall-back to _curlrc if the dot-version is missing.
  
  Co-Authored-By: Steve Holme
  
  Closes #4230

- netrc: make the code try ".netrc" on Windows as well
  
  ... but fall back and try "_netrc" too if the dot version didn't work.
  
  Co-Authored-By: Steve Holme

- ngtcp2: use ngtcp2_version() to get the run-time version
  
  ... which of course doesn't have to be the same used at build-time.
  
  Function just recently merged in ngtcp2.

- ngtcp2: move the h3 initing to immediately after the rx key
  
  To fix a segfault and to better deal with 0-RTT
  
  Assisted-by: Tatsuhiro Tsujikawa

- [Alessandro Ghedini brought this change]

  quiche: register debug callback once and earlier
  
  The quiche debug callback is global and can only be initialized once, so
  make sure we don't do it multiple times (e.g. if multiple requests are
  executed).
  
  In addition this initializes the callback before the connection is
  created, so we get logs for the handshake as well.
  
  Closes #4236

- ssh: add a generic Curl_ssh_version function for SSH backends
  
  Closes #4235

- base64: check for SSH, not specific SSH backends

- vssh: move ssh init/cleanup functions into backend code

- vssh: create directory for SSH backend code

- TODO/ROADMAP: remove "refuse downgrade redirects" and HTTP/3
  
  HTTP3 is now already in full progress
  
  Downgrade redirects can be achived almost exactly like that by setting
  CURLOPT_REDIR_PROTOCOLS.

- RELEASE-NOTES: synced

- travis: add a quiche build
  
  Closes #4207

- http: fix use of credentials from URL when using HTTP proxy
  
  When a username and password are provided in the URL, they were wrongly
  removed from the stored URL so that subsequent uses of the same URL
  wouldn't find the crendentials. This made doing HTTP auth with multiple
  connections (like Digest) mishave.
  
  Regression from 46e164069d1a5230 (7.62.0)
  
  Test case 335 added to verify.
  
  Reported-by: Mike Crowe
  
  Fixes #4228
  Closes #4229

- [Mike Crowe brought this change]

  tests: Replace outdated test case numbering documentation
  
  Tests are no longer grouped by numeric range[1]. Let's stop saying that
  and provide some alternative advice for numbering tests.
  
  [1] https://curl.haxx.se/mail/lib-2019-08/0043.html
  
  Closes #4227

- travis: reduce number of torture tests in 'coverage'
  
  ... to make it complete in time. This cut seems not almost not affect
  the coverage percentage and yet completes within 35 minutes on travis
  where the previous runs recently always timed out after 50.
  
  Closes #4223

- [Igor Makarov brought this change]

  configure: use -lquiche to link to quiche
  
  Closes #4226

- ngtcp2: provide the callbacks as a static struct
  
  ... instead of having them in quicsocket

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: add missing nghttp3_conn_add_write_offset call
  
  Closes #4225

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: deal with stream close

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: Consume QUIC STREAM data properly

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: don't reinitialize SSL on Retry

- multi: getsock improvements for QUIC connecting

- connect: connections are persistent by default for HTTP/3

- quiche: happy eyeballs
  
  Closes #4220

- ngtcp2: do QUIC connections happy-eyeballs friendly

- curl_version: bump string buffer size to 250
  
  With HTTP/3 libs and plenty TLS libs, I manged to hit the limit (which
  causes a truncated output).

- CURLOPT_ALTSVC.3: use a "" file name to not load from a file

Jay Satiro (14 Aug 2019)
- vauth: Use CURLE_AUTH_ERROR for auth function errors
  
  - Add new error code CURLE_AUTH_ERROR.
  
  Prior to this change auth function errors were signaled by
  CURLE_OUT_OF_MEMORY and CURLE_RECV_ERROR, and neither one was
  technically correct.
  
  Ref: https://github.com/curl/curl/pull/3848
  
  Co-authored-by: Dominik Hölzl
  
  Closes https://github.com/curl/curl/pull/3864

Daniel Stenberg (13 Aug 2019)
- curl_version_info: make the quic_version a const
  
  Follow-up from 1a2df1518ad8653f
  
  Closes #4222

- examples: add http3.c, altsvc.c and http3-present.c
  
  Closes #4221

Peter Wu (13 Aug 2019)
- nss: use TLSv1.3 as default if supported
  
  SSL_VersionRangeGetDefault returns (TLSv1.0, TLSv1.2) as supported
  range in NSS 3.45. It looks like the intention is to raise the minimum
  version rather than lowering the maximum, so adjust accordingly. Note
  that the caller (nss_setup_connect) initializes the version range to
  (TLSv1.0, TLSv1.3), so there is no need to check for >= TLSv1.0 again.
  
  Closes #4187
  Reviewed-by: Daniel Stenberg
  Reviewed-by: Kamil Dudka

Daniel Stenberg (13 Aug 2019)
- quic.h: remove unused proto

- curl_version_info.3: mentioned ALTSVC and HTTP3
  
  ... and sorted the list alphabetically

- lib/quic.c: unused - removed

- CURLOPT_ALTSVC_CTRL.3: remove CURLALTSVC_ALTUSED
  
  Follow-up to 98c3f148 that removed it from the header file

- [Junho Choi brought this change]

  docs/HTTP3: simplify quiche build instruction
  
  Use --recursive to get boringssl in one line
  
  Closes #4219

- altsvc: make it use h3-22 with ngtcp2 as well

- ngtcp2: initial h3 request work
  
  Closes #4217

- curl_version_info: offer quic (and h3) library info
  
  Closes #4216

- HTTP3: use ngtcp2's draft-22 branch

- RELEASE-NOTES: synced

- CURLOPT_READFUNCTION.3: provide inline example
  
  ... instead of mentioning one in another place

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: send HTTP/3 request with nghttp3
  
  This commit makes sending HTTP/3 request with nghttp3 work.  It
  minimally receives HTTP response and calls nghttp3 callbacks, but no
  processing is made at the moment.
  
  Closes #4215

- nghttp3: initial h3 template code added

- nghttp3: required when ngtcp2 is used for QUIC
  
  - checked for by configure
  - updated docs/HTTP3.md
  - shown in the version string
  
  Closes #4210

- [Eric Wong brought this change]

  asyn-thread: issue CURL_POLL_REMOVE before closing socket
  
  This avoids EBADF errors from EPOLL_CTL_DEL operations in the
  ephiperfifo.c example.  EBADF is dangerous in multi-threaded
  applications where I rely on epoll_ctl to operate on the same
  epoll description from different threads.
  
  Follow-up to eb9a604f8d7db8
  
  Bug: https://curl.haxx.se/mail/lib-2019-08/0026.html
  Closes #4211

- [Carlo Marcelo Arenas Belón brought this change]

  configure: avoid undefined check_for_ca_bundle
  
  instead of using a "greater than 0" test, check for variable being
  set, as it is always set to 1, and could be left unset if non of
  OPENSSL MBEDTLS GNUTLS WOLFSSL is being configured for.
  
  Closes #4213

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: Send ALPN h3-22
  
  Closes #4212

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: use ngtcp2_settings_default and specify initial_ts

- curl_global_init_mem.3: mention it was added in 7.12.0

- [Tatsuhiro Tsujikawa brought this change]

  ngtcp2: make the QUIC handshake work
  
  Closes #4209

- [Alex Mayorga brought this change]

  HTTP3.md: Update quiche build instructions
  
  Added cloning for quiche and BoringSSL and modified the build
  instructions so they work on a clean folder.
  
  Closes #4208

- CURLOPT_H3: removed
  
  There's no use for this anymore and it was never in a release.
  
  Closes #4206

- http3: make connection reuse work
  
  Closes #4204

- quiche: add SSLKEYLOGFILE support

- cleanup: s/curl_debug/curl_dbg_debug in comments and docs
  
  Leftovers from the function rename back in 76b63489495
  
  Reported-by: Gisle Vanem
  Bug: https://github.com/curl/curl/commit/f3e0f071b14fcb46a453f69bdf4e062bcaacf362#com
  mitcomment-34601751
  
  Closes #4203

- RELEASE-NOTES: synced

- alt-svc: add protocol version selection masking
  
  So that users can mask in/out specific HTTP versions when Alt-Svc is
  used.
  
   - Removed "h2c" and updated test case accordingly
   - Changed how the altsvc struct is laid out
   - Added ifdefs to make the unittest run even in a quiche-tree
  
  Closes #4201

- http3: fix the HTTP/3 in the request, make alt-svc set right versions
  
  Closes #4200

- alt-svc: send Alt-Used: in redirected requests
  
  RFC 7838 section 5:
  
     When using an alternative service, clients SHOULD include an Alt-Used
     header field in all requests.
  
  Removed CURLALTSVC_ALTUSED again (feature is still EXPERIMENTAL thus
  this is deemed ok).
  
  You can disable sending this header just like you disable any other HTTP
  header in libcurl.
  
  Closes #4199

- CURLOPT_HTTP_VERSION: seting this to 3 forces HTTP/3 use directly
  
  Even though it cannot fall-back to a lower HTTP version automatically. The
  safer way to upgrade remains via CURLOPT_ALTSVC.
  
  CURLOPT_H3 no longer has any bits that do anything and might be removed
  before we remove the experimental label.
  
  Updated the curl tool accordingly to use "--http3".
  
  Closes #4197

- docs/ALTSVC: remove what works and the experimental explanation
  
  Also, put the TODO items at the bottom.
  
  Closes #4198

- docs/EXPERIMENTAL: explain what it means and what's experimental now

- curl: make use of CURLINFO_RETRY_AFTER when retrying
  
  If a Retry-After: header was used in the response, that value overrides
  other retry timing options.
  
  Fixes #3794
  Closes #4195

- curl: use CURLINFO_PROTOCOL to check for HTTP(s)
  
  ... instead of CURLINFO_EFFECTIVE_URL to avoid string operations.

- CURLINFO_RETRY_AFTER: parse the Retry-After header value
  
  This is only the libcurl part that provides the information. There's no
  user of the parsed value. This change includes three new tests for the
  parser.
  
  Ref: #3794

- docs/ALTSVC.md: first basic file format description

- curl: have -w's 'http_version' show '3' for HTTP/3
  
  Closes #4196

- curl.h: add CURL_HTTP_VERSION_3 to the version enum
  
  It can't be set for CURLOPT_HTTP_VERSION, but it can be extracted with
  CURLINFO_HTTP_VERSION.

- quiche: make use of the connection timeout API properly

- quiche: make POSTFIELDS posts work

- quiche: improved error handling and memory cleanups

- quiche: flush egress in h3_stream_recv() too

- RELEASE-NOTES: synced

Jay Satiro (6 Aug 2019)
- [Patrick Monnerat brought this change]

  os400: take care of CURLOPT_SASL_AUTHZID in curl_easy_setopt_ccsid().
  
  Ref: https://github.com/curl/curl/issues/3653
  Ref: https://github.com/curl/curl/pull/3790
  
  NOTE: This commit was cherry-picked and is part of a series of commits
  that added the authzid feature for upcoming 7.66.0. The series was
  temporarily reverted in db8ec1f so that it would not ship in a 7.65.x
  patch release.
  
  Closes https://github.com/curl/curl/pull/4186

- tests: Fix the line endings for the SASL alt-auth tests
  
  - Change data and protocol sections to CRLF line endings.
  
  Prior to this change the tests would fail or hang, which is because
  certain sections such as protocol require CRLF line endings.
  
  Follow-up to grandparent commit which added the tests.
  
  Ref: https://github.com/curl/curl/issues/3653
  Ref: https://github.com/curl/curl/pull/3790
  
  NOTE: This commit was cherry-picked and is part of a series of commits
  that added the authzid feature for upcoming 7.66.0. The series was
  temporarily reverted in db8ec1f so that it would not ship in a 7.65.x
  patch release.
  
  Closes https://github.com/curl/curl/pull/4186

- [Steve Holme brought this change]

  examples: Added SASL PLAIN authorisation identity (authzid) examples
  
  Ref: https://github.com/curl/curl/issues/3653
  Ref: https://github.com/curl/curl/pull/3790
  
  NOTE: This commit was cherry-picked and is part of a series of commits
  that added the authzid feature for upcoming 7.66.0. The series was
  temporarily reverted in db8ec1f so that it would not ship in a 7.65.x
  patch release.
  
  Closes https://github.com/curl/curl/pull/4186

- [Steve Holme brought this change]

  curl: --sasl-authzid added to support CURLOPT_SASL_AUTHZID from the tool
  
  Ref: https://github.com/curl/curl/issues/3653
  Ref: https://github.com/curl/curl/pull/3790
  
  NOTE: This commit was cherry-picked and is part of a series of commits
  that added the authzid feature for upcoming 7.66.0. The series was
  temporarily reverted in db8ec1f so that it would not ship in a 7.65.x
  patch release.
  
  Closes https://github.com/curl/curl/pull/4186

- [Steve Holme brought this change]

  sasl: Implement SASL authorisation identity via CURLOPT_SASL_AUTHZID
  
  Added the ability for the calling program to specify the authorisation
  identity (authzid), the identity to act as, in addition to the
  authentication identity (authcid) and password when using SASL PLAIN
  authentication.
  
  Fixes #3653
  Closes #3790
  
  NOTE: This commit was cherry-picked and is part of a series of commits
  that added the authzid feature for upcoming 7.66.0. The series was
  temporarily reverted in db8ec1f so that it would not ship in a 7.65.x
  patch release.
  
  Closes https://github.com/curl/curl/pull/4186

Daniel Stenberg (6 Aug 2019)
- docs/HTTP3: refreshed as it is now in master and HTTP/3 can be tested

- [Yiming Jing brought this change]

  mesalink: implement client authentication
  
  Closes #4184

- curl_multi_poll: a sister to curl_multi_wait() that waits more
  
  Repeatedly we see problems where using curl_multi_wait() is difficult or
  just awkward because if it has no file descriptor to wait for
  internally, it returns immediately and leaves it to the caller to wait
  for a small amount of time in order to avoid occasional busy-looping.
  
  This is often missed or misunderstood, leading to underperforming
  applications.
  
  This change introduces curl_multi_poll() as a replacement drop-in
  function that accepts the exact same set of arguments. This function
  works identically to curl_multi_wait() - EXCEPT - for the case when
  there's nothing to wait for internally, as then this function will by
  itself wait for a "suitable" short time before it returns. This
  effectiely avoids all risks of busy-looping and should also make it less
  likely that apps "over-wait".
  
  This also changes the curl tool to use this funtion internally when
  doing parallel transfers and changes curl_easy_perform() to use it
  internally.
  
  Closes #4163

- quiche:h3_stream_recv return 0 at end of stream
  
  ... and remove some verbose messages we don't need. Made transfers from
  facebook.com work better.

- altsvc: make quiche use h3-22 now

- quiche: show the actual version number

- quiche: first working HTTP/3 request
  
   - enable debug log
   - fix use of quiche API
   - use download buffer
   - separate header/body
  
  Closes #4193

- http09: disable HTTP/0.9 by default in both tool and library
  
  As the plan has been laid out in DEPRECATED. Update docs accordingly and
  verify in test 1174. Now requires the option to be set to allow HTTP/0.9
  responses.
  
  Closes #4191

- quiche: initial h3 request send/receive

- lib/Makefile.am: make checksrc run in vquic too

- altsvc: fix removal of expired cache entry
  
  Closes #4192

- RELEASE-NOTES: synced

Steve Holme (4 Aug 2019)
- md4: Use our own MD4 implementation when no crypto libraries are available
  
  Closes #3780

- md4: No need to include Curl_md4.h for each TLS library

- md4: No need for the NTLM code to call Curl_md4it() for each TLS library
  
  As the NTLM code no longer calls any of TLS libraries' specific MD4
  functions, there is no need to call this function for each #ifdef.

- md4: Move the mbed TLS MD4 implementation out of the NTLM code

- md4: Move the WinCrypt implementation out of the NTLM code

- md4: Move the SecureTransport implementation out of the NTLM code

- md4: Use the Curl_md4it() function for OpenSSL based NTLM

- md4: Move the GNU TLS gcrypt MD4 implementation out of the NTLM code

- md4: Move the GNU TLS Nettle MD4 implementation out of the NTLM code

Jay Satiro (4 Aug 2019)
- OS400: Add CURLOPT_H3 symbols
  
  Follow-up to 3af0e76 which added experimental H3 support.
  
  Closes https://github.com/curl/curl/pull/4185

Daniel Stenberg (3 Aug 2019)
- url: make use of new HTTP version if alt-svc has one

- url: set conn->transport to default TCP at init time

- altsvc: with quiche, use the quiche h3 alpn string
  
  Closes #4183

- alt-svc: more liberal ALPN name parsing
  
  Allow pretty much anything to be part of the ALPN identifier. In
  particular minus, which is used for "h3-20" (in-progress HTTP/3
  versions) etc.
  
  Updated test 356.
  Closes #4182

- quiche: use the proper HTTP/3 ALPN

- quiche: add failf() calls for two error cases
  
  To aid debugging
  
  Closes #4181

- mailmap: added Kyohei Kadota

Kamil Dudka (1 Aug 2019)
- http_negotiate: improve handling of gss_init_sec_context() failures
  
  If HTTPAUTH_GSSNEGOTIATE was used for a POST request and
  gss_init_sec_context() failed, the POST request was sent
  with empty body.  This commit also restores the original
  behavior of `curl --fail --negotiate`, which was changed
  by commit 6c6035532383e300c712e4c1cd9fdd749ed5cf59.
  
  Add regression tests 2077 and 2078 to cover this.
  
  Fixes #3992
  Closes #4171

Daniel Stenberg (1 Aug 2019)
- mailmap: added 4 more names
  
  Evgeny Grin, Peter Pih, Anton Malov and Marquis de Muesli

- mailmap: add Giorgos Oikonomou

- src/makefile: fix uncompressed hugehelp.c generation
  
  Regression from 5cf5d57ab9 (7.64.1)
  
  Fixed-by: Lance Ware
  Fixes #4176
  Closes #4177

- appveyor: pass on -k to make

- timediff: make it 64 bit (if possible) even with 32 bit time_t
  
  ... to make it hold microseconds too.
  
  Fixes #4165
  Closes #4168

- ROADMAP: parallel transfers are merged now

- getenv: support up to 4K environment variable contents on windows
  
  Reported-by: Michal Čaplygin
  Fixes #4174
  Closes #4175

- [Kyohei Kadota brought this change]

  plan9: add support for running on Plan 9
  
  Closes #3701

- [Kyohei Kadota brought this change]

  ntlm: explicit type casting

- [Justin brought this change]

  curl.h: fix outdated comment
  
  Closes #4167

- curl: remove outdated comment
  
  Turned bad with commit b8894085000
  
  Reported-by: niallor on github
  Fixes #4172
  Closes #4173

- cleanup: remove the 'numsocks' argument used in many places
  
  It was used (intended) to pass in the size of the 'socks' array that is
  also passed to these functions, but was rarely actually checked/used and
  the array is defined to a fixed size of MAX_SOCKSPEREASYHANDLE entries
  that should be used instead.
  
  Closes #4169

- readwrite_data: repair setting the TIMER_STARTTRANSFER stamp
  
  Regression, broken in commit 65eb65fde64bd5f (curl 7.64.1)
  
  Reported-by: Jonathan Cardoso Machado
  Assisted-by: Jay Satiro
  
  Fixes #4136
  Closes #4162

- mailmap: Amit Katyal

- asyn-thread: removed unused variable
  
  Follow-up to eb9a604f. Mistake caused by me when I edited the commit
  before push...

- RELEASE-NOTES: synced

- [Amit Katyal brought this change]

  asyn-thread: create a socketpair to wait on
  
  Closes #4157

- curl: cap the maximum allowed values for retry time arguments
  
  ... to avoid integer overflows later when multiplying with 1000 to
  convert seconds to milliseconds.
  
  Added test 1269 to verify.
  
  Reported-by: Jason Lee
  Closes #4166

- progress: reset download/uploaded counter
  
  ... to make CURLOPT_MAX_RECV_SPEED_LARGE and
  CURLOPT_MAX_SEND_SPEED_LARGE work correctly on subsequent transfers that
  reuse the same handle.
  
  Fixed-by: Ironbars13 on github
  Fixes #4084
  Closes #4161

- http2_recv: trigger another read when the last data is returned
  
  ... so that end-of-stream is detected properly.
  
  Reported-by: Tom van der Woerdt
  Fixes #4043
  Closes #4160

- curl: avoid uncessary libcurl timeouts (in parallel mode)
  
  When curl_multi_wait() returns OK without file descriptors to wait for,
  it might already have done a long timeout.
  
  Closes #4159

- [Balazs Kovacsics brought this change]

  HTTP: use chunked Transfer-Encoding for HTTP_POST if size unknown
  
  If using the read callback for HTTP_POST, and POSTFIELDSIZE is not set,
  automatically add a Transfer-Encoding: chunked header, same as it is
  already done for HTTP_PUT, HTTP_POST_FORM and HTTP_POST_MIME.  Update
  test 1514 according to the new behaviour.
  
  Closes #4138

Jay Satiro (29 Jul 2019)
- [Daniel Stenberg brought this change]

  winbuild: add vquic to list of build directories
  
  This fixes the winbuild build method which broke several days ago
  when experimental quic support was added in 3af0e76.
  
  Reported-by: Michael Lee
  
  Fixes https://github.com/curl/curl/issues/4158

- easy: resize receive buffer on easy handle reset
  
  - In curl_easy_reset attempt to resize the receive buffer to its default
    size. If realloc fails then continue using the previous size.
  
  Prior to this change curl_easy_reset did not properly handle resetting
  the receive buffer (data->state.buffer). It reset the variable holding
  its size (data->set.buffer_size) to the default size (READBUFFER_SIZE)
  but then did not actually resize the buffer. If a user resized the
  buffer by using CURLOPT_BUFFERSIZE to set the size smaller than the
  default, later called curl_easy_reset and attempted to reuse the handle
  then a heap overflow would very likely occur during that handle's next
  transfer.
  
  Reported-by: Felix Hädicke
  
  Fixes https://github.com/curl/curl/issues/4143
  Closes https://github.com/curl/curl/pull/4145

- [Brad Spencer brought this change]

  examples: Avoid reserved names in hiperfifo examples
  
  - Trade in __attribute__((unused)) for the classic (void)x to silence
    unused symbols.
  
  Because the classic way is not gcc specific. Also because the prior
  method mapped to symbol _Unused, which starts with _ and a capital
  letter which is reserved.
  
  Assisted-by: The Infinnovation team
  
  Bug: https://github.com/curl/curl/issues/4120#issuecomment-512542108
  
  Closes https://github.com/curl/curl/pull/4153

Daniel Stenberg (25 Jul 2019)
- RELEASE-NOTES: synced

- [Felix Hädicke brought this change]

  ssh-libssh: do not specify O_APPEND when not in append mode
  
  Specifying O_APPEND in conjunction with O_TRUNC and O_CREAT does not
  make much sense. And this combination of flags is not accepted by all
  SFTP servers (at least not Apache SSHD).
  
  Fixes #4147
  Closes #4148

- [Gergely Nagy brought this change]

  multi: call detach_connection before Curl_disconnect
  
  Curl_disconnect bails out if conn->easyq is not empty, detach_connection
  needs to be called first to remove the current easy from the queue.
  
  Fixes #4144
  Closes #4151

Jay Satiro (23 Jul 2019)
- tool_operate: fix implicit call to easysrc_cleanup
  
  easysrc_cleanup is only defined when CURL_DISABLE_LIBCURL_OPTION is not
  defined, and prior to this change would be called regardless.
  
  Bug: https://github.com/curl/curl/pull/3804#issuecomment-513922637
  Reported-by: Marcel Raad
  
  Closes https://github.com/curl/curl/pull/4142

Daniel Stenberg (22 Jul 2019)
- curl:create_transfers check return code from curl_easy_setopt
  
  From commit b8894085
  
  Pointed out by Coverity CID 1451703
  
  Closes #4134

- HTTP3: initial (experimental) support
  
  USe configure --with-ngtcp2 or --with-quiche
  
  Using either option will enable a HTTP3 build.
  Co-authored-by: Alessandro Ghedini <alessandro@ghedini.me>
  
  Closes #3500

- curl: remove dead code
  
  The loop never loops (since b889408500), pointed out by Coverity (CID
  1451702)
  
  Closes #4133

- docs/PARALLEL-TRANSFERS: correct the version number

- docs/PARALLEL-TRANSFERS: added

- curl: support parallel transfers
  
  This is done by making sure each individual transfer is first added to a
  linked list as then they can be performed serially, or at will, in
  parallel.
  
  Closes #3804

- docs/MANUAL.md: converted to markdown from plain text
  
  ... will make it render as a nicer web page.
  
  Closes #4131

- curl_version_info: provide nghttp2 details
  
  Introducing CURLVERSION_SIXTH with nghttp2 info.
  
  Closes #4121

- bump: start working on 7.66.0

- source: remove names from source comments
  
  Several reasons:
  
  - we can't add everyone who's helping out so its unfair to just a few
  selected ones.
  - we already list all helpers in THANKS and in RELEASE-NOTES for each
  release
  - we don't want to give the impression that some parts of the code is
  "owned" or "controlled" by specific persons
  
  Assisted-by: Daniel Gustafsson
  Closes #4129

Version 7.65.3 (19 Jul 2019)

Daniel Stenberg (19 Jul 2019)
- RELEASE-NOTES: 7.65.3

- THANKS: 7.65.3 status

- progress: make the progress meter appear again
  
  Fix regression caused by 21080e1
  
  Reported-by: Chih-Hsuan Yen
  Fixes #4122
  Closes #4124

- version: bump to 7.65.3

- RELEASE-NOTES: Contributors or now 1990

Version 7.65.2 (17 Jul 2019)

Daniel Stenberg (17 Jul 2019)
- RELEASE-NOTES: 7.65.2

- THANKS: add contributors from 7.65.2

Jay Satiro (17 Jul 2019)
- [aasivov brought this change]

  cmake: Fix finding Brotli on case-sensitive file systems
  
  - Find package "Brotli" instead of "BROTLI" since the former is the
    casing used for CMake/FindBrotli.cmake, and otherwise find_package
    may fail on a case-sensitive file system.
  
  Fixes https://github.com/curl/curl/issues/4117

- CURLOPT_RANGE.3: Caution against using it for HTTP PUT
  
  AFAICT CURLOPT_RANGE does not support ranged HTTP PUT uploads so I've
  cautioned against using it for that purpose and included a workaround.
  
  Bug: https://curl.haxx.se/mail/lib-2019-04/0075.html
  Reported-by: Christopher Head
  
  Closes https://github.com/curl/curl/issues/3814

- [Stefano Simonelli brought this change]

  CURLOPT_SEEKDATA.3: fix variable name
  
  Closes https://github.com/curl/curl/pull/4118

- [Giorgos Oikonomou brought this change]

  CIPHERS.md: Explain Schannel error SEC_E_ALGORITHM_MISMATCH
  
  If the SSL backend is Schannel and the user specifies an Schannel CALG_
  that is not supported by the protocol or the server then curl returns
  CURLE_SSL_CONNECT_ERROR (35) SEC_E_ALGORITHM_MISMATCH.
  
  Fixes https://github.com/curl/curl/issues/3389
  Closes https://github.com/curl/curl/pull/4106

- [Daniel Gustafsson brought this change]

  nss: inspect returnvalue of token check
  
  PK11_IsPresent() checks for the token for the given slot is available,
  and sets needlogin flags for the PK11_Authenticate() call.  Should it
  return false, we should however treat it as an error and bail out.
  
  Closes https://github.com/curl/curl/pull/4110

- docs: Explain behavior change in --tlsv1. options since 7.54
  
  Since 7.54 --tlsv1. options use the specified version or later, however
  older versions of curl documented it as using just the specified version
  which may or may not have happened depending on the TLS library.
  Document this discrepancy to allay confusion for users familiar with the
  old documentation that expect just the specified version.
  
  Fixes https://github.com/curl/curl/issues/4097
  Closes https://github.com/curl/curl/pull/4119

- libcurl: Restrict redirect schemes (follow-up)
  
  - Allow FTPS on redirect.
  
  - Update default allowed redirect protocols in documentation.
  
  Follow-up to 6080ea0.
  
  Ref: https://github.com/curl/curl/pull/4094
  
  Closes https://github.com/curl/curl/pull/4115

Daniel Stenberg (16 Jul 2019)
- test1173: make it also check all libcurl option man pages
  
  ... and adjust those that cause errors
  
  Closes #4116

- curl: only accept COLUMNS less than 10000
  
  ... as larger values would rather indicate something silly (and could
  potentially cause buffer problems).
  
  Reported-by: pendrek at hackerone
  Closes #4114

- dist: add manpage-syntax.pl
  
  follow-up to 7fb66c403

- test1173: detect some basic man page format mistakes
  
  Triggered by PR #4111
  
  Closes #4113

Jay Satiro (15 Jul 2019)
- [Bjarni Ingi Gislason brought this change]

  docs: Fix missing lines caused by undefined macros
  
  - Escape apostrophes at line start.
  
  Some lines begin with a "'" (apostrophe, single quote), which is then
  interpreted as a control character in *roff.
  
  Such lines are interpreted as being a call to a macro, and if
  undefined, the lines are removed from the output.
  
  Bug: https://bugs.debian.org/926352
  Signed-off-by: Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
  
  Submitted-by: Alessandro Ghedini
  
  Closes https://github.com/curl/curl/pull/4111

Daniel Stenberg (14 Jul 2019)
- libcurl-security.3: update to new CURLOPT_REDIR_PROTOCOLS defaults
  
  follow-up to 6080ea098

- [Linos Giannopoulos brought this change]

  libcurl: Add testcase for gopher redirects
  
  The testcase ensures that redirects to CURLPROTO_GOPHER won't be
  allowed, by default, in the future. Also, curl is being used
  for convenience while keeping the testcases DRY.
  
  The expected error code is CURLE_UNSUPPORTED_PROTOCOL when the client is
  redirected to CURLPROTO_GOPHER
  
  Signed-off-by: Linos Giannopoulos <lgian@skroutz.gr>

- [Linos Giannopoulos brought this change]

  libcurl: Restrict redirect schemes
  
  All protocols except for CURLPROTO_FILE/CURLPROTO_SMB and their TLS
  counterpart were allowed for redirect. This vastly broadens the
  exploitation surface in case of a vulnerability such as SSRF [1], where
  libcurl-based clients are forced to make requests to arbitrary hosts.
  
  For instance, CURLPROTO_GOPHER can be used to smuggle any TCP-based
  protocol by URL-encoding a payload in the URI. Gopher will open a TCP
  connection and send the payload.
  
  Only HTTP/HTTPS and FTP are allowed. All other protocols have to be
  explicitly enabled for redirects through CURLOPT_REDIR_PROTOCOLS.
  
  [1]: https://www.acunetix.com/blog/articles/server-side-request-forgery-vulnerability/
  
  Signed-off-by: Linos Giannopoulos <lgian@skroutz.gr>
  
  Closes #4094

- [Zenju brought this change]

  openssl: define HAVE_SSL_GET_SHUTDOWN based on version number
  
  Closes #4100

- [Peter Simonyi brought this change]

  http: allow overriding timecond with custom header
  
  With CURLOPT_TIMECONDITION set, a header is automatically added (e.g.
  If-Modified-Since).  Allow this to be replaced or suppressed with
  CURLOPT_HTTPHEADER.
  
  Fixes #4103
  Closes #4109

Jay Satiro (11 Jul 2019)
- [Juergen Hoetzel brought this change]

  smb: Use the correct error code for access denied on file open
  
  - Return CURLE_REMOTE_ACCESS_DENIED for SMB access denied on file open.
  
  Prior to this change CURLE_REMOTE_FILE_NOT_FOUND was returned instead.
  
  Closes https://github.com/curl/curl/pull/4095

- [Daniel Gustafsson brought this change]

  DEPRECATE: fixup versions and spelling
  
  Correctly set the July 17 version to 7.65.2, and update spelling to
  be consistent. Also fix a typo.
  
  Closes https://github.com/curl/curl/pull/4107

- [Gisle Vanem brought this change]

  system_win32: fix clang warning
  
  - Declare variable in header as extern.
  
  Bug: https://github.com/curl/curl/commit/48b9ea4#commitcomment-34084597

Daniel Gustafsson (10 Jul 2019)
- headers: Remove no longer exported functions
  
  There were a leftover few prototypes of Curl_ functions that we used to
  export but no longer do, this removes those prototypes and cleans up any
  comments still referring to them.
  
  Curl_write32_le(), Curl_strcpy_url(), Curl_strlen_url(), Curl_up_free()
  Curl_concat_url(), Curl_detach_connnection(), Curl_http_setup_conn()
  were made static in 05b100aee247bb9bec8e9a1b0166496aa4248d1c.
  Curl_http_perhapsrewind() made static in 574aecee208f79d391f10d57520b3.
  
  For the remainder, I didn't trawl the Git logs hard enough to capture
  their exact time of deletion, but they were all gone: Curl_splayprint(),
  Curl_http2_send_request(), Curl_global_host_cache_dtor(),
  Curl_scan_cache_used(), Curl_hostcache_destroy(), Curl_second_connect(),
  Curl_http_auth_stage() and Curl_close_connections().
  
  Closes #4096
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

- CMake: fix typos and spelling

- [Kyle Edwards brought this change]

  CMake: Convert errant elseif() to else()
  
  CMake interprets an elseif() with no arguments as elseif(FALSE),
  resulting in the elseif() block not being executed. That is not what
  was intended here. Change the empty elseif() to an else() as it was
  intended.
  
  Closes #4101
  Reported-by: Artalus <artalus-mail@yandex.ru>
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>

- buildconf: fix header filename
  
  The header file inclusion had a typo, it should be .h and not .hd.
  Fix by renaming.
  
  Fixes #4102
  Reported-by: AceCrow on Github

- [Jan Chren brought this change]

  configure: fix --disable-code-coverage
  
  This fixes the case when --disable-code-coverage supplied to ./configure
  would result in coverage="yes" being set.
  
  Closes #4099
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>

- cleanup: fix typo in comment

- RELEASE-NOTES: synced

Jay Satiro (6 Jul 2019)
- [Daniel Gustafsson brought this change]

  nss: support using libnss on macOS
  
  The file suffix for dynamically loadable objects on macOS is .dylib,
  which need to be added for the module definitions in order to get the
  NSS TLS backend to work properly on macOS.
  
  Closes https://github.com/curl/curl/pull/4046

- [Daniel Gustafsson brought this change]

  nss: don't set unused parameter
  
  The value of the maxPTDs parameter to PR_Init() has since at least
  NSPR 2.1, which was released sometime in 1998, been marked ignored
  as is accordingly not used in the initialization code.  Setting it
  to a value when calling PR_Init() is thus benign, but indicates an
  intent which may be misleading. Reset the value to zero to improve
  clarity.
  
  Closes https://github.com/curl/curl/pull/4054

- [Daniel Gustafsson brought this change]

  nss: only cache valid CRL entries
  
  Change the logic around such that we only keep CRLs that NSS actually
  ended up caching around for later deletion.  If CERT_CacheCRL() fails
  then there is little point in delaying the freeing of the CRL as it
  is not used.
  
  Closes https://github.com/curl/curl/pull/4053

- [Gergely Nagy brought this change]

  lib: Use UTF-8 encoding in comments
  
  Some editors and IDEs assume that source files use UTF-8 file encodings.
  It also fixes the build with MSVC when /utf-8 command line option is
  used (this option is mandatory for some other open-source projects, this
  is useful when using the same options is desired for building all
  libraries of a project).
  
  Closes https://github.com/curl/curl/pull/4087

- [Caleb Raitto brought this change]

  CURLOPT_HEADEROPT.3: Fix example
  
  Fix an issue where example builds a curl_slist, but fails to actually
  use it, or free it.
  
  Closes https://github.com/curl/curl/pull/4090

- [Shankar Jadhavar brought this change]

  winbuild: Change Makefile to honor ENABLE_OPENSSL_AUTO_LOAD_CONFIG
  
  - Made changes so that ENABLE_OPENSSL_AUTO_LOAD_CONFIG will be honored.
  
  - Also removed some ^M chars from file.
  
  Prior to this change while building on Windows platform even if we pass
  the ENABLE_OPENSSL_AUTO_LOAD_CONFIG option with value as "no" it does
  not set the CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG flag.
  
  Closes https://github.com/curl/curl/pull/4086

Daniel Stenberg (4 Jul 2019)
- doh-url.d: added in 7.62.0

Jay Satiro (30 Jun 2019)
- docs: Fix links to OpenSSL docs
  
  OpenSSL changed their manual locations and does not redirect to the new
  locations.
  
  Bug: https://curl.haxx.se/mail/lib-2019-06/0056.html
  Reported-by: Daniel Stenberg

Daniel Stenberg (26 Jun 2019)
- [Gaël PORTAY brought this change]

  curl_multi_wait.3: escape backslash in example
  
  The backslash in the character Line Feed must be escaped.
  
  The current man-page outputs the code as following:
  
          fprintf(stderr, "curl_multi failed, code %d.0, mc);
  
  The commit fixes it as follow:
  
          fprintf(stderr, "curl_multi failed, code %d\n", mc);
  
  Closes #4079

- openssl: disable engine if OPENSSL_NO_UI_CONSOLE is defined
  
  ... since that needs UI_OpenSSL() which isn't provided when OpenSSL is
  built with OPENSSL_NO_UI_CONSOLE which happens when OpenSSL is built for
  UWP (with "VC-WIN32-UWP").
  
  Reported-by: Vasily Lobaskin
  Fixes #4073
  Closes #4077

- test1521: adapt to SLISTPOINT
  
  The header now has the slist-using options marked as SLISTPOINT so this
  makes sure test 1521 understands that.
  
  Follow-up to ae99b4de1c443ae989
  
  Closes #4074

- win32: make DLL loading a no-op for UWP
  
  Reported-by: Michael Brehm
  Fixes #4060
  Closes #4072

- [1ocalhost brought this change]

  configure: fix typo '--disable-http-uath'
  
  Closes #4076

- [Niklas Hambüchen brought this change]

  docs: fix string suggesting HTTP/2 is not the default
  
  Commit 25fd1057c9c86e3 made HTTP2 the default, and further down in the
  man page that new default is mentioned, but the section at the top
  contradicted it until now.
  
  Also remove claim that setting the HTTP version is not sensible.
  
  Closes #4075

- RELEASE-NOTES: synced

- [Stephan Szabo brought this change]

  tests: update fixed IP for hostip/clientip split
  
  These tests give differences for me on linux when using a hostip
  pointing to the external ip address for the local machine.
  
  Closes #4070

Daniel Gustafsson (24 Jun 2019)
- http: clarify header buffer size calculation
  
  The header buffer size calculation can from static analysis seem to
  overlow as it performs an addition between two size_t variables and
  stores the result in a size_t variable. Overflow is however guarded
  against elsewhere since the input to the addition is regulated by
  the maximum read buffer size. Clarify this with a comment since the
  question was asked.
  
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Daniel Stenberg (24 Jun 2019)
- KNOWN_BUGS: Don't clear digest for single realm
  
  Closes #3267

- KNOWN_BUGS: Schannel disable CURLOPT_SSL_VERIFYPEER and verify hostname
  
  Closes #3284

- http2: call done_sending on end of upload
  
  To make sure a HTTP/2 stream registers the end of stream.
  
  Bug #4043 made me find this problem but this fix doesn't correct the
  reported issue.
  
  Closes #4068

- [James Brown brought this change]

  c-ares: honor port numbers in CURLOPT_DNS_SERVERS
  
  By using ares_set_servers_ports_csv on new enough c-ares.
  
  Fixes #4066
  Closes #4067

Daniel Gustafsson (24 Jun 2019)
- CURLMOPT_SOCKETFUNCTION.3: fix typo

Daniel Stenberg (24 Jun 2019)
- [Koen Dergent brought this change]

  curl: skip CURLOPT_PROXY_CAPATH for disabled-proxy builds
  
  Closes #4061

- test153: fix content-length to avoid occasional hang
  
  Closes #4065

- RELEASE-NOTES: synced

- multi: enable multiplexing by default (again)
  
  It was originally made default in d7c4213bd0c (7.62.0) but mistakenly
  reverted in commit 2f44e94efb3d (7.65.0). Now enabled again.
  
  Closes #4051

- typecheck: add 3 missing strings and a callback data pointer
  
  Closes #4050

- tests: add disable-scan.pl to dist
  
  follow-up from 29177f422a5
  
  Closes #4059

- http2: don't call stream-close on already closed streams
  
  Closes #4055

Marcel Raad (20 Jun 2019)
- travis: enable alt-svc for coverage build
  
  Closes

- travis: enable libssh2 for coverage build
  
  It was enabled by default before commit c92d2e14cfb.
  
  Disable torture tests 600 and 601 because of
  https://github.com/curl/curl/issues/1678.
  
  Closes

- travis: disable threaded resolver for coverage build
  
  This enables more tests.
  
  Closes

- travis: enable brotli for all xenial jobs
  
  There's no need for a separate job, and no need to build it from source
  with Xenial.
  
  Closes

- travis: enable warnings-as-errors for coverage build
  
  Closes

GitHub (20 Jun 2019)
- [Gisle Vanem brought this change]

  system_win32: fix typo

Daniel Stenberg (20 Jun 2019)
- typecheck: CURLOPT_CONNECT_TO takes an slist too
  
  Additionally, add an alias in curl.h for slist-using options so that
  we can grep/parse those out at will.
  
  Closes #4042

- [Stephan Szabo brought this change]

  tests: support non-localhost HOSTIP for dict/smb servers
  
  smbserver.py/dictserver.py were explicitly using localhost/127.0.0.1 for
  binding the server which when we were running the tests with a separate
  HOSTIP and CLIENTIP had failures verifying the server from the device we
  were testing.
  
  This changes them to take the address from runtests.py and default to
  localhost/127.0.0.1 if none is given.
  
  Closes #4048

- test1523: basic test of CURLOPT_LOW_SPEED_LIMIT

- configure: --disable-progress-meter
  
  Builds libcurl without support for the built-in progress meter.
  
  Closes #4023

- curl: improved skip-setopt-options when built with disabled features
  
  Reduces #ifdefs in src/tool_operate.c
  
  Follow-up from 4e86f2fc4e6
  Closes #3936

Steve Holme (18 Jun 2019)
- netrc: Return the correct error code when out of memory
  
  Introduced in 763c5178.
  
  Closes #4036

Daniel Stenberg (18 Jun 2019)
- config-os400: add getpeername and getsockname defines
  
  Reported-by: jonrumsey on github
  Fixes #4037
  Closes #4039

- runtests: keep logfiles around by default
  
  Make '-k' a no-op. The singletest function now clears the log directory
  BEFORE each individual test and not after, which makes it possible to
  always keep the logfiles around after a test has been run. No need to
  specify -k anymore. Keeping the option parsing around to work with users
  of old habits.
  
  Some tests also didn't work properly when -k was used (since the old
  logs would be kep when a new test starts) which this change also fixes.
  
  Closes #4035

- [Gergely Nagy brought this change]

  openssl: fix pubkey/signature algorithm detection in certinfo
  
  Certinfo gives the same result for all OpenSSL versions.
  Also made printing RSA pubkeys consistent with older versions.
  
  Reported-by: Michael Wallner
  Fixes #3706
  Closes #4030

- conn_maxage: move the check to prune_dead_connections()
  
  ... and avoid the locking issue.
  
  Reported-by: Kunal Ekawde
  Fixes #4029
  Closes #4032

- tests: have runtests figure out disabled features
  
  ... so that runtests can skip individual test cases that test features
  that are explicitly disabled in this build. This new logic is intended
  for disabled features that aren't otherwise easily visible through the
  curl_version_info() or other API calls.
  
  tests/server/disabled is a newly built executable that will output a
  list of disabled features. Outputs nothing for a default build.
  
  Closes #3950

- test188/189: fix Content-Length
  
  This cures the flaky test results
  
  Closes #4034

- [Thomas Gamper brought this change]

  winbuild: use WITH_PREFIX if given
  
  Closes #4031

Daniel Gustafsson (17 Jun 2019)
- openssl: remove outdated comment
  
  OpenSSL used to call exit(1) on syntax errors in OPENSSL_config(),
  which is why we switched to CONF_modules_load_file() and introduced
  a comment stating why. This behavior was however changed in OpenSSL
  commit abdd677125f3a9e3082f8c5692203590fdb9b860, so remove the now
  outdated and incorrect comment. The mentioned commit also declares
  OPENSSL_config() deprecated so keep the current coding.
  
  Closes #4033
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Daniel Stenberg (16 Jun 2019)
- RELEASE-NOTES: synced

Patrick Monnerat (16 Jun 2019)
- os400: make vsetopt() non-static as Curl_vsetopt() for os400 support.
  
  Use it in curl_easy_setopt_ccsid().
  
  Reported-by: jonrumsey on github
  Fixes #3833
  Closes #4028

Daniel Stenberg (15 Jun 2019)
- runtests: report single test time + total duration
  
  ... after each successful test.
  
  Closes #4027

- multi: fix the transfer hash function
  
  Follow-up from 8b987cc7eb
  
  Reported-by: Tom van der Woerdt
  Fixes #4018
  Closes #4024

- unit1654: cleanup on memory failure
  
  ... to make it handle torture tests properly.
  
  Reported-by: Marcel Raad
  Fixes #4021
  Closes #4022

Marcel Raad (13 Jun 2019)
- krb5: fix compiler warning
  
  Even though the variable was used in a DEBUGASSERT, GCC 8 warned in
  debug mode:
  krb5.c:324:17: error: unused variable 'maj' [-Werror=unused-variable]
  
  Just suppress the warning and declare the variable unconditionally
  instead of only for DEBUGBUILD (which also missed the check for
  HAVE_ASSERT_H).
  
  Closes https://github.com/curl/curl/pull/4020

Daniel Stenberg (13 Jun 2019)
- quote.d: asterisk prefix works for SFTP as well
  
  Reported-by: Ben Voris
  Fixes #4017
  Closes #4019

- multi: fix the transfer hashes in the socket hash entries
  
  - The transfer hashes weren't using the correct keys so removing entries
    failed.
  
  - Simplified the iteration logic over transfers sharing the same socket and
    they now simply are set to expire and thus get handled in the "regular"
    timer loop instead.
  
  Reported-by: Tom van der Woerdt
  Fixes #4012
  Closes #4014

Jay Satiro (12 Jun 2019)
- [Cliff Crosland brought this change]

  url: Fix CURLOPT_MAXAGE_CONN time comparison
  
  Old connections are meant to expire from the connection cache after
  CURLOPT_MAXAGE_CONN seconds. However, they actually expire after 1000x
  that value. This occurs because a time value measured in milliseconds is
  accidentally divided by 1M instead of by 1,000.
  
  Closes https://github.com/curl/curl/pull/4013

Daniel Stenberg (11 Jun 2019)
- test1165: verify that CURL_DISABLE_ symbols are in sync
  
  between configure.ac and source code. They should be possible to switch
  on/off in configure AND be used in source code.

- configure: remove CURL_DISABLE_TLS_SRP
  
  It isn't used by code so stop providing the define.
  
  Closes #4010

- Revert "cmake: add SMB to list of disabled protocols if HTTP_ONLY is specified"
  
  This reverts commit 36738caeb78603ce24e3ea089a167b8c216fb938.
  
  Apparently several of the appveyor windows builds broke.

- [sergey-raevskiy brought this change]

  cmake: add SMB to list of disabled protocols if HTTP_ONLY is specified
  
  Reviewed-by: Jakub Zakrzewski
  Closes #3770

- RELEASE-NOTES: synced

- http2: remove CURL_DISABLE_TYPECHECK define
  
  ... in http2-less builds as it served no use.

- configure: more --disable switches to toggle off individual features
  
  ... actual support in the code for disabling these has already landed.
  
  Closes #4009

- wolfssl: fix key pinning build error
  
  follow-up from deb9462ff2de8
