From: Daniel Stenberg Date: Mon, 12 Jan 2026 10:07:01 +0000 (+0100) Subject: urldata: change 'keep_post' into three distinct bitfields X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e0b02c19c5b87790361ed898804866d0bcb1d99;p=thirdparty%2Fcurl.git urldata: change 'keep_post' into three distinct bitfields Closes #20262 --- diff --git a/lib/http.c b/lib/http.c index bea62ef5cd..0343aba3e7 100644 --- a/lib/http.c +++ b/lib/http.c @@ -1413,7 +1413,7 @@ CURLcode Curl_http_follow(struct Curl_easy *data, const char *newurl, if((data->state.httpreq == HTTPREQ_POST || data->state.httpreq == HTTPREQ_POST_FORM || data->state.httpreq == HTTPREQ_POST_MIME) && - !(data->set.keep_post & CURL_REDIR_POST_301)) { + !data->set.post301) { http_switch_to_get(data, 301); switch_to_get = TRUE; } @@ -1438,7 +1438,7 @@ CURLcode Curl_http_follow(struct Curl_easy *data, const char *newurl, if((data->state.httpreq == HTTPREQ_POST || data->state.httpreq == HTTPREQ_POST_FORM || data->state.httpreq == HTTPREQ_POST_MIME) && - !(data->set.keep_post & CURL_REDIR_POST_302)) { + !data->set.post302) { http_switch_to_get(data, 302); switch_to_get = TRUE; } @@ -1454,7 +1454,7 @@ CURLcode Curl_http_follow(struct Curl_easy *data, const char *newurl, ((data->state.httpreq != HTTPREQ_POST && data->state.httpreq != HTTPREQ_POST_FORM && data->state.httpreq != HTTPREQ_POST_MIME) || - !(data->set.keep_post & CURL_REDIR_POST_303))) { + !data->set.post303)) { http_switch_to_get(data, 303); switch_to_get = TRUE; } diff --git a/lib/setopt.c b/lib/setopt.c index 62e19a0562..5ea3cbbb9b 100644 --- a/lib/setopt.c +++ b/lib/setopt.c @@ -963,7 +963,9 @@ static CURLcode setopt_long(struct Curl_easy *data, CURLoption option, /* no return error on too high numbers since the bitmask could be extended in a future */ return CURLE_BAD_FUNCTION_ARGUMENT; - s->keep_post = arg & CURL_REDIR_POST_ALL; + s->post301 = !!(arg & CURL_REDIR_POST_301); + s->post302 = !!(arg & CURL_REDIR_POST_302); + s->post303 = !!(arg & CURL_REDIR_POST_303); break; case CURLOPT_HEADEROPT: diff --git a/lib/urldata.h b/lib/urldata.h index 564329d9d2..0517b9b2d0 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -1469,10 +1469,8 @@ struct UserDefined { */ uint8_t ftp_create_missing_dirs; #endif - uint8_t use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or - IMAP or POP3 or others! (type: curl_usessl)*/ - char keep_post; /* keep POSTs as POSTs after a 30x request; each - bit represents a request, from 301 to 303 */ + uint8_t use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or IMAP or + POP3 or others! (type: curl_usessl)*/ uint8_t timecondition; /* kind of time comparison: curl_TimeCond */ uint8_t method; /* what kind of HTTP request: Curl_HttpReq */ uint8_t httpwant; /* when non-zero, a specific HTTP version requested @@ -1587,6 +1585,9 @@ struct UserDefined { BIT(ws_raw_mode); BIT(ws_no_auto_pong); #endif + BIT(post301); /* keep POSTs as POSTs after a 301 request */ + BIT(post302); /* keep POSTs as POSTs after a 302 request */ + BIT(post303); /* keep POSTs as POSTs after a 303 request */ }; #ifndef CURL_DISABLE_MIME