multi.h: add CURLMNWC_CLEAR_ALL

The two bitmask constants for *CLEAR_DNS and *CLEAR_CONNS were
duplicates (both set to 1), so they cannot be distinguished and both
actions fire.

This shipped in public releases since 8.16.0 to and include 8.19.0.

This fix adds CURLMNWC_CLEAR_ALL to be the new 1, and it now implies all
bits. The DNS and CONNS defines get two new bits (2, 4).

Follow-up to 55c045c863

Found by Codex Security
Closes #20968
This commit is contained in:
Daniel Stenberg 2026-03-21 23:06:02 +01:00
parent e9eddedf38
commit 57a94fec47
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
4 changed files with 36 additions and 23 deletions

View file

@ -408,15 +408,19 @@ typedef enum {
/* Definition of bits for the CURLMOPT_NETWORK_CHANGED argument: */
/* - CURLMNWC_CLEAR_CONNS tells libcurl to prevent further reuse of existing
connections. Connections that are idle are closed. Ongoing transfers
do continue with the connection they have. */
#define CURLMNWC_CLEAR_CONNS (1L << 0)
/* - CURLMNWC_CLEAR_ALL tells libcurl to clear "everything" that could be
associated with this network, including both connections and DNS data. */
#define CURLMNWC_CLEAR_ALL (1L << 0)
/* - CURLMNWC_CLEAR_DNS tells libcurl to prevent further reuse of existing
connections. Connections that are idle are closed. Ongoing transfers
do continue with the connection they have. */
#define CURLMNWC_CLEAR_DNS (1L << 0)
/* - CURLMNWC_CLEAR_CONNS tells libcurl to prevent further reuse of existing
connections. Connections that are idle are closed. Ongoing transfers do
continue with the connection they have. */
#define CURLMNWC_CLEAR_CONNS (1L << 1)
/* - CURLMNWC_CLEAR_DNS tells libcurl to clear the DNS cache associated with
this multi handle. Ongoing transfers keep using their already resolved
addresses, but future name resolutions are performed again. */
#define CURLMNWC_CLEAR_DNS (1L << 2)
/*
* Name: curl_multi_setopt()