transfer: clear the old autoreferer
No binary (build failed)
—
(log yok)
| @@ -1958,7 +1958,6 @@ static CURLcode setopt_cptr(struct Curl_easy *data, CURLoption option, | |
| * String to set in the HTTP Referer: field. | |
| */ | |
| result = Curl_setstropt(&s->str[STRING_SET_REFERER], ptr); | |
| - | Curl_bufref_set(&data->state.referer, s->str[STRING_SET_REFERER], 0, NULL); |
| break; | |
| case CURLOPT_USERAGENT: | |
| @@ -537,6 +537,11 @@ CURLcode Curl_pretransfer(struct Curl_easy *data) | |
| data->state.authproxy.want = data->set.proxyauth; | |
| curlx_safefree(data->info.wouldredirect); | |
| Curl_data_priority_clear_state(data); | |
| + | if(data->set.http_auto_referer) |
| + | Curl_bufref_free(&data->state.referer); |
| + | if(data->set.str[STRING_SET_REFERER]) |
| + | Curl_bufref_set(&data->state.referer, data->set.str[STRING_SET_REFERER], |
| + | 0, NULL); |
| if(data->state.httpreq == HTTPREQ_PUT) | |
| data->state.infilesize = data->set.filesize; | |
| @@ -265,7 +265,7 @@ test2309 \ | |
| \ | |
| test2400 test2401 test2402 test2403 test2404 test2405 test2406 test2407 \ | |
| \ | |
| - | test2500 test2501 test2502 test2503 test2504 \ |
| + | test2500 test2501 test2502 test2503 test2504 test2505 \ |
| \ | |
| test2600 test2601 test2602 test2603 test2604 test2605 \ | |
| \ | |
| @@ -0,0 +1,67 @@ | |
| + | <?xml version="1.0" encoding="US-ASCII"?> |
| + | <testcase> |
| + | <info> |
| + | <keywords> |
| + | HTTP |
| + | referer |
| + | autoreferer |
| + | </keywords> |
| + | </info> |
| + | |
| + | # Server-side |
| + | <reply> |
| + | <data crlf="headers" nocheck="yes"> |
| + | HTTP/1.1 301 redirect |
| + | Date: Tue, 09 Nov 2010 14:49:00 GMT |
| + | Server: server.example.com |
| + | Content-Length: 47 |
| + | Location: %TESTNUMBER0002 |
| + | |
| + | file contents should appear once for each file |
| + | </data> |
| + | |
| + | <data2 crlf="headers" nocheck="yes"> |
| + | HTTP/1.1 200 OK |
| + | Date: Tue, 09 Nov 2010 14:49:00 GMT |
| + | Server: server.example.com |
| + | Content-Length: 47 |
| + | |
| + | file contents should appear once for each file |
| + | </data2> |
| + | </reply> |
| + | |
| + | # Client-side |
| + | <client> |
| + | <server> |
| + | http |
| + | </server> |
| + | <tool> |
| + | lib%TESTNUMBER |
| + | </tool> |
| + | <name> |
| + | verify CURLOPT_AUTOREFERER switched off |
| + | </name> |
| + | <command> |
| + | http://%HOSTIP:%HTTPPORT |
| + | </command> |
| + | </client> |
| + | |
| + | # Verify data after the test has been "shot" |
| + | <verify> |
| + | <protocol crlf="headers"> |
| + | GET / HTTP/1.1 |
| + | Host: %HOSTIP:%HTTPPORT |
| + | Accept: */* |
| + | |
| + | GET /%TESTNUMBER0002 HTTP/1.1 |
| + | Host: %HOSTIP:%HTTPPORT |
| + | Accept: */* |
| + | Referer: http://%HOSTIP:%HTTPPORT/ |
| + | |
| + | GET / HTTP/1.1 |
| + | Host: %HOSTIP:%HTTPPORT |
| + | Accept: */* |
| + | |
| + | </protocol> |
| + | </verify> |
| + | </testcase> |
| @@ -112,7 +112,7 @@ TESTS_C = \ | |
| lib2023.c lib2032.c lib2082.c \ | |
| lib2301.c lib2302.c lib2304.c lib2306.c lib2308.c lib2309.c \ | |
| lib2402.c lib2404.c lib2405.c \ | |
| - | lib2502.c lib2504.c \ |
| + | lib2502.c lib2504.c lib2505.c \ |
| lib2700.c \ | |
| lib3010.c lib3025.c lib3026.c lib3027.c lib3033.c lib3034.c \ | |
| lib3100.c lib3101.c lib3102.c lib3103.c lib3104.c lib3105.c \ | |
| @@ -0,0 +1,71 @@ | |
| + | /*************************************************************************** |
| + | * _ _ ____ _ |
| + | * Project ___| | | | _ \| | |
| + | * / __| | | | |_) | | |
| + | * | (__| |_| | _ <| |___ |
| + | * \___|\___/|_| \_\_____| |
| + | * |
| + | * Copyright (C) Linus Nielsen Feltzing <[email protected]> |
| + | * |
| + | * This software is licensed as described in the file COPYING, which |
| + | * you should have received as part of this distribution. The terms |
| + | * are also available at https://curl.se/docs/copyright.html. |
| + | * |
| + | * You may opt to use, copy, modify, merge, publish, distribute and/or sell |
| + | * copies of the Software, and permit persons to whom the Software is |
| + | * furnished to do so, under the terms of the COPYING file. |
| + | * |
| + | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY |
| + | * KIND, either express or implied. |
| + | * |
| + | * SPDX-License-Identifier: curl |
| + | * |
| + | ***************************************************************************/ |
| + | #include "first.h" |
| + | |
| + | #include "testtrace.h" |
| + | |
| + | static size_t sink2505(char *ptr, size_t size, size_t nmemb, void *ud) |
| + | { |
| + | (void)ptr; |
| + | (void)ud; |
| + | return size * nmemb; |
| + | } |
| + | |
| + | static CURLcode test_lib2505(const char *URL) |
| + | { |
| + | CURL *curl; |
| + | CURLcode result = CURLE_OUT_OF_MEMORY; |
| + | |
| + | if(curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { |
| + | curl_mfprintf(stderr, "curl_global_init() failed\n"); |
| + | return TEST_ERR_MAJOR_BAD; |
| + | } |
| + | |
| + | curl = curl_easy_init(); |
| + | if(!curl) { |
| + | curl_mfprintf(stderr, "curl_easy_init() failed\n"); |
| + | curl_global_cleanup(); |
| + | return TEST_ERR_MAJOR_BAD; |
| + | } |
| + | |
| + | test_setopt(curl, CURLOPT_WRITEFUNCTION, sink2505); |
| + | test_setopt(curl, CURLOPT_AUTOREFERER, 1L); |
| + | test_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |
| + | test_setopt(curl, CURLOPT_URL, URL); |
| + | |
| + | result = curl_easy_perform(curl); |
| + | curl_mprintf("req1=%d\n", (int)result); |
| + | |
| + | test_setopt(curl, CURLOPT_FOLLOWLOCATION, 0L); |
| + | test_setopt(curl, CURLOPT_URL, URL); |
| + | |
| + | result = curl_easy_perform(curl); |
| + | curl_mprintf("req2=%d\n", (int)result); |
| + | |
| + | test_cleanup: |
| + | curl_easy_cleanup(curl); |
| + | curl_global_cleanup(); |
| + | |
| + | return result; |
| + | } |