Commit Graph

29609 Commits

Author SHA1 Message Date
Patrick Monnerat
184fc6f07a
tool: use feature names instead of bit mask, when possible
If the run-time libcurl is too old to support feature names, the name
array is created locally from the bit masks. This is the only sequence
left that uses feature bit masks.

Closes #9583
2022-11-14 09:19:10 +01:00
Patrick Monnerat
e1e482517f
docs: curl_version_info is not thread-safe before libcurl initialization
Closes #9583
2022-11-14 09:19:06 +01:00
Patrick Monnerat
e780aae77a
version: add a feature names array to curl_version_info_data
Field feature_names contains a null-terminated sorted array of feature
names. Bitmask field features is deprecated.

Documentation is updated. Test 1177 and tests/version-scan.pl updated to
match new documentation format and extended to check feature names too.

Closes #9583
2022-11-14 09:18:53 +01:00
Stefan Eissing
00ea0aaf46
negtelnetserver.py: have it call its close() method
Closes #9894
2022-11-14 08:50:51 +01:00
Nathan Moinvaziri
5f8351aea3
ntlm: silence ubsan warning about copying from null target_info pointer.
runtime error: null pointer passed as argument 2, which is declared to
never be null

Closes #9898
2022-11-13 22:42:01 +01:00
Daniel Stenberg
1ec3f449fb
RELEASE-NOTES: synced 2022-11-12 00:54:35 +01:00
Stefan Eissing
13d550203e
Websocket: fixes for partial frames and buffer updates.
- buffers updated correctly when handling partial frames
- callbacks no longer invoked for incomplete payload data of 0 length
- curl_ws_recv no longer returns with 0 length partial payload

Closes #9890
2022-11-12 00:51:24 +01:00
Daniel Stenberg
7f182f7136
tool_operate: provide better errmsg for -G with bad URL
If the URL that -G would try to add a query to could not be parsed, it would
display

 curl: (27) Out of memory

It now instead shows:

 curl: (2) Could not parse the URL, failed to set query

Reported-by: Alex Xu
Fixes #9889
Closes #9892
2022-11-12 00:45:24 +01:00
Daniel Stenberg
aecc549699
vtls: fix build without proxy support
Follow-up to dafdb20a26

Closes #9895
2022-11-12 00:14:24 +01:00
Daniel Stenberg
0f860da4b6
tool_getparam: make --no-get work as the opposite of --get
... as documented.

Closes #9891
2022-11-12 00:13:29 +01:00
Daniel Stenberg
fa0b922761
http: mark it 'this_is_a_follow' in the Location: logic
To make regular auth "reloads" to not count as redirects.

Verified by test 3101

Fixes #9885
Closes #9887
2022-11-12 00:12:46 +01:00
Viktor Szakats
83c4c1a056
config-win32: fix SIZEOF_OFF_T for MSVC and old MinGW
The previously set default value of 8 (64-bit) is only correct for
mingw-w64 and only when we set `_FILE_OFFSET_BITS` to 64 (the default
when building curl). For MSVC, old MinGW and other Windows compilers,
the correct value is 4 (32-bit). Adjust condition accordingly. Also
drop the manual override option.

Regression in 7.86.0 (from 68fa9bf3f5)

Bug: https://github.com/curl/curl/pull/9712#issuecomment-1307330551

Reported-by: Peter Piekarski
Reviewed-by: Jay Satiro

Closes #9872
2022-11-11 20:12:40 +00:00
Daniel Stenberg
bf12c2bed6
lib: remove bad set.opt_no_body assignments
This struct field MUST remain what the application set it to, so that
handle reuse and handle duplication work.

Instead, the request state bit 'no_body' is introduced for code flows
that need to change this in run-time.

Closes #9888
2022-11-11 15:56:05 +01:00
Stefan Eissing
dafdb20a26
lib: connection filters (cfilter) addition to curl:
- general construct/destroy in connectdata
 - default implementations of callback functions
 - connect: cfilters for connect and accept
 - socks: cfilter for socks proxying
 - http_proxy: cfilter for http proxy tunneling
 - vtls: cfilters for primary and proxy ssl
 - change in general handling of data/conn
 - Curl_cfilter_setup() sets up filter chain based on data settings,
   if none are installed by the protocol handler setup
 - Curl_cfilter_connect() boot straps filters into `connected` status,
   used by handlers and multi to reach further stages
 - Curl_cfilter_is_connected() to check if a conn is connected,
   e.g. all filters have done their work
 - Curl_cfilter_get_select_socks() gets the sockets and READ/WRITE
   indicators for multi select to work
 - Curl_cfilter_data_pending() asks filters if the have incoming
   data pending for recv
 - Curl_cfilter_recv()/Curl_cfilter_send are the general callbacks
   installed in conn->recv/conn->send for io handling
 - Curl_cfilter_attach_data()/Curl_cfilter_detach_data() inform filters
   and addition/removal of a `data` from their connection
 - adding vtl functions to prevent use of Curl_ssl globals directly
   in other parts of the code.

Reviewed-by: Daniel Stenberg
Closes #9855
2022-11-11 15:17:51 +01:00
Stefan Eissing
89ee5cfb38
curl-rustls.m4: on macOS, rustls also needs the Security framework
Closes #9883
2022-11-10 17:50:51 +01:00
Daniel Stenberg
b25e4be79f
rtsp: only store first_host once
Suggested-by: Erik Janssen
URL: https://github.com/curl/curl/pull/9870#issuecomment-1309499744
Closes #9882
2022-11-10 12:36:27 +01:00
Fata Nugraha
f65f445f54
test3028: verify PROXY 2022-11-10 12:25:17 +01:00
Fata Nugraha
11ad25fff4
http: do not send PROXY more than once
Unlike `CONNECT`, currently we don't keep track whether `PROXY` is
already sent or not. This causes `PROXY` header to be sent twice during
`MSTATE_TUNNELING` and `MSTATE_PROTOCONNECT`.

Closes #9878
Fixes #9442
2022-11-10 12:24:48 +01:00
Jay Satiro
6d75115406 lib: add CURL_WRITEFUNC_ERROR to signal write callback error
Prior to this change if the user wanted to signal an error from their
write callbacks they would have to use logic to return a value different
from the number of bytes (nmemb) passed to the callback. Also, the
inclination of some users has been to just return 0 to signal error,
which is incorrect as that may be the number of bytes passed to the
callback.

To remedy this the user can now return CURL_WRITEFUNC_ERROR instead.

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

Closes https://github.com/curl/curl/pull/9874
2022-11-10 03:13:58 -05:00
Daniel Stenberg
988c1c12f5
Revert "GHA: add scorecard.yml"
This reverts commit ca76c79b34.
2022-11-09 10:29:19 +01:00
Daniel Stenberg
ca76c79b34
GHA: add scorecard.yml
add a "scorecard" scanner job
2022-11-09 10:10:33 +01:00
Lorenzo Miniero
0baca08dc9
test3100: RTSP Basic authentication
Closes #9449
2022-11-09 09:40:07 +01:00
Daniel Stenberg
2bc04d4980
rtsp: fix RTSP auth
Verified with test 3100

Fixes #4750
Closes #9870
2022-11-09 09:40:00 +01:00
Daniel Stenberg
e46d388c87
KNOWN_BUGS: remove eight entries
- 1.2 Multiple methods in a single WWW-Authenticate: header

This is not considered a bug anymore but a restriction and one that we
keep because we have NEVER gotten this reported by users in the wild and
because of this I consider this a fringe edge case we don't need to
support.

- 1.6 Unnecessary close when 401 received waiting for 100

This is not a bug, but possibly an optimization that *can* be done.

- 1.7 Deflate error after all content was received

This is not a curl bug. This happens due to broken servers.

- 2.1 CURLINFO_SSL_VERIFYRESULT has limited support

This is not a bug. This is just the nature of the implementation.

- 2.2 DER in keychain

This is not a bug.

- 5.7 Visual Studio project gaps

This is not a bug.

- 15.14 cmake build is not thread-safe

Fixed in 109e9730ee

- 11.3 Disconnects do not do verbose

This is not a bug.

Closes #9871
2022-11-09 09:37:21 +01:00
Hirotaka Tagawa
39538fcc4e
headers: add endif comments
Closes #9853
2022-11-09 00:36:33 +01:00
Daniel Stenberg
633493947f
test1221: verify --url-query 2022-11-08 14:37:35 +01:00
Daniel Stenberg
b6e1afd069
curl: add --url-query
This option adds a piece of data, usually a name + value pair, to the
end of the URL query part. The syntax is identical to that used for
--data-urlencode with one extension:

If the argument starts with a '+' (plus), the rest of the string is
provided as-is unencoded.

This allows users to "build" query parts with options and URL encoding
even when not doing GET requests, which the already provided option -G
(--get) is limited to.

This idea was born in a Twitter thread.

Closes #9691
2022-11-08 14:37:34 +01:00
Daniel Stenberg
43232b5992
maketgz: set the right version in lib/libcurl.plist
Follow-up to e498a9b1fe

Make sure the tarball gets a version of the libcurl.plist file that is
updated with the new version string.

Reported-by: jvreelanda on github
Fixes #9866
Closes #9867
2022-11-08 10:46:12 +01:00
Daniel Stenberg
f96d375a5b
RELEASE-NOTES: synced
Bumped version to 7.87.0
2022-11-08 10:29:17 +01:00
Michael Drake
1fdca35ddd
curl.h: add CURLOPT_CA_CACHE_TIMEOUT option
Adds a new option to control the maximum time that a cached
certificate store may be retained for.

Currently only the OpenSSL backend implements support for
caching certificate stores.

Closes #9620
2022-11-08 10:06:12 +01:00
Michael Drake
3c16697ebd
openssl: reduce CA certificate bundle reparsing by caching
Closes #9620
2022-11-08 10:06:12 +01:00
Rose
f151ec6c10 lib: fix some type mismatches and remove unneeded typecasts
Many of these castings are unneeded if we change the variables to work
better with each other.

Ref: https://github.com/curl/curl/pull/9823

Closes https://github.com/curl/curl/pull/9835
2022-11-08 03:11:01 -05:00
Daniel Stenberg
14061f784c
cookie: compare cookie prefixes case insensitively
Adapted to language in rfc6265bis draft-11.

Closes #9863

Reviewed-by: Daniel Gustafsson
2022-11-08 09:08:09 +01:00
Daniel Stenberg
c0b24c93a9
tool_operate: when aborting, make sure there is a non-NULL error buffer
To store custom errors in. Or SIGSEGVs will follow.

Reported-by: Trail of Bits
Closes #9865
2022-11-07 23:55:26 +01:00
Daniel Stenberg
1188c6b8ea
WEBSOCKET.md: fix broken link
Reported-by: Felipe Gasper
Bug: https://curl.se/mail/lib-2022-10/0097.html
Closes #9864
2022-11-07 23:54:32 +01:00
Daniel Stenberg
ec4eec222b
CURLOPT_DEBUGFUNCTION.3: do not assume nul-termination in example
Reported-by: Oskar Sigvardsson

Bug: https://curl.se/mail/lib-2022-11/0016.html

Closes #9862
2022-11-07 12:48:39 +01:00
Stefan Eissing
af5a22a9c1
websockets: fix handling of partial frames
buffer used and send length calculations are fixed when a partial
websocket frame has been received.

Closes #9861
2022-11-07 12:29:43 +01:00
Daniel Stenberg
f9618ffe40
mailmap: unify Stefan Eissing 2022-11-07 12:24:07 +01:00
Stefan Eissing
9ad386f85b
hyper: fix handling of hyper_task's when reusing the same address
Fixes #9840
Closes #9860
2022-11-07 12:19:36 +01:00
Jay Satiro
3cbdf4a148
ws: return CURLE_NOT_BUILT_IN when websockets not built in
- Change curl_ws_recv & curl_ws_send to return CURLE_NOT_BUILT_IN when
  websockets support is not built in.

Prior to this change they returned CURLE_OK.

Closes #9851
2022-11-07 08:02:00 +01:00
Daniel Stenberg
b1953c1933
noproxy: tailmatch like in 7.85.0 and earlier
A regfression in 7.86.0 (via 1e9a538e05) made the tailmatch work
differently than before. This restores the logic to how it used to work:

All names listed in NO_PROXY are tailmatched against the used domain
name, if the lengths are identical it needs a full match.

Update the docs, update test 1614.

Reported-by: Stuart Henderson
Fixes #9842
Closes #9858
2022-11-07 08:00:38 +01:00
Daniel Stenberg
592107fa16
configure: require fork for NTLM-WB
Reported-by: ウさん

Fixes #9847
Closes #9856
2022-11-06 00:04:47 +01:00
Daniel Stenberg
2d4533996c
docs/EARLY-RELEASE.md: how to determine an early release
URL: https://curl.se/mail/lib-2022-10/0079.html

Closes #9820
2022-11-05 23:52:11 +01:00
Daniel Stenberg
6b6667c585
RELEASE-NOTES: synced 2022-11-03 11:37:15 +01:00
Zespre Schmidt
c2fecfbf80
docs: add missing parameters for --retry flag
Closes #9848
2022-11-03 09:36:04 +01:00
Adam Averay
84e2ca7e3c
libcurl-errors.3: remove duplicate word
Closes #9846
2022-11-03 09:34:03 +01:00
Eric Vigeant
6c51adeb71
cur_path: do not add '/' if homedir ends with one
When using SFTP and a path relative to the user home, do not add a
trailing '/' to the user home dir if it already ends with one.

Closes #9844
2022-11-03 09:31:43 +01:00
Viktor Szakats
3390ef0af0
windows: fail early with a missing windres in autotools
`windres` is not always auto-detected by autotools when building for
Windows. When this happened, the build failed with a confusing error due
to the empty `RC` command:

```
/bin/bash ../libtool --tag=RC --mode=compile  -I../include -DCURL_EMBED_MANIFEST  -i curl.rc -o curl.o
[...]
Usage: /sandbox/curl/libtool [OPTION]... [MODE-ARG]...
Try 'libtool --help' for more information.
libtool:   error: unrecognised option: '-I../include'
```

Improve this by verifying if `RC` is set, and fail with a clear error
otherwise.

Follow-up to 6de7322c03

Ref: https://curl.se/mail/lib-2022-10/0049.html
Reported-by: Thomas Glanzmann
Closes #9781
2022-11-01 22:45:28 +00:00
Viktor Szakats
edae6c66c7
lib: sync guard for Curl_getaddrinfo_ex() definition and use
`Curl_getaddrinfo_ex()` gets _defined_ with `HAVE_GETADDRINFO` set. But,
`hostip4.c` _used_ it with `HAVE_GETADDRINFO_THREADSAFE` set alone. It
meant a build with the latter, but without the former flag could result
in calling this function but not defining it, and failing to link.

Patch this by adding an extra check for `HAVE_GETATTRINFO` around the
call.

Before this patch, build systems prevented this condition. Now they
don't need to.

While here, simplify the related CMake logic on Windows by setting
`HAVE_GETADDRINFO_THREADSAFE` to the detection result of
`HAVE_GETADDRINFO`. This expresses the following intent clearer than
the previous patch and keeps the logic in a single block of code:
When we have `getaddrinfo()` on Windows, it's always threadsafe.

Follow-up to 67d88626d4

Reviewed-by: Jay Satiro
Closes #9734
2022-11-01 22:40:36 +00:00
Viktor Szakats
b563a92cd6
tidy-up: process.h detection and use
This patch aims to cleanup the use of `process.h` header and the macro
`HAVE_PROCESS_H` associated with it.

- `process.h` is always available on Windows. In curl, it is required
  only for `_beginthreadex()` in `lib/curl_threads.c`.

- `process.h` is also available in MS-DOS. In curl, its only use was in
  `lib/smb.c` for `getpid()`. But `getpid()` is in fact declared by
  `unistd.h`, which is always enabled via `lib/config-dos.h`. So the
  header is not necessary.

- `HAVE_PROCESS_H` was detected by CMake, forced to 1 on Windows and
  left to real detection for other platforms.
  It was also set to always-on in `lib/config-win32.h` and
  `lib/config-dos.h`.
  In autotools builds, there was no detection and the macro was never
  set.

Based on these observations, in this patch we:

- Rework Windows `getpid` logic in `lib/smb.c` to always use the
  equivalent direct Win32 API function `GetCurrentProcessId()`, as we
  already did for Windows UWP apps. This makes `process.h` unnecessary
  here on Windows.

- Stop #including `process.h` into files where it was not necessary.
  This is everywhere, except `lib/curl_threads.c`.

  > Strangely enough, `lib/curl_threads.c` compiled fine with autotools
  > because `process.h` is also indirecty included via `unistd.h`. This
  > might have been broken in autotools MSVC builds, where the latter
  > header is missing.

- Delete all remaining `HAVE_PROCESS_H` feature guards, for they were
  unnecessary.

- Delete `HAVE_PROCESS_H` detection from CMake and predefined values
  from `lib/config-*.h` headers.

Reviewed-by: Jay Satiro
Closes #9703
2022-11-01 22:27:28 +00:00