curl: error out if -T and -d are used for the same URL

As one implies PUT and the other POST, both cannot be used
simultaneously.

Add test 378 to verify.

Reported-by: Boris Verkhovskiy
Fixes #8704
Closes #8715
This commit is contained in:
Daniel Stenberg 2022-04-17 11:18:16 +02:00
parent 6968fb9d54
commit 01a1697a79
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
5 changed files with 54 additions and 6 deletions

View File

@ -5,7 +5,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@ -85,7 +85,8 @@ int SetHTTPrequest(struct OperationConfig *config, HttpReq req, HttpReq *store)
"GET (-G, --get)",
"HEAD (-I, --head)",
"multipart formpost (-F, --form)",
"POST (-d, --data)"
"POST (-d, --data)",
"PUT (-T, --upload-file)"
};
if((*store == HTTPREQ_UNSPEC) ||
@ -109,7 +110,8 @@ void customrequest_helper(struct OperationConfig *config, HttpReq req,
"GET",
"HEAD",
"POST",
"POST"
"POST",
"PUT"
};
if(!method)

View File

@ -917,6 +917,12 @@ static CURLcode single_transfer(struct GlobalConfig *global,
result = CURLE_OUT_OF_MEMORY;
break;
}
if(SetHTTPrequest(config, HTTPREQ_PUT, &config->httpreq)) {
Curl_safefree(per->uploadfile);
curl_easy_cleanup(curl);
result = CURLE_FAILED_INIT;
break;
}
}
*added = TRUE;
per->config = config;

View File

@ -7,7 +7,7 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
* Copyright (C) 1998 - 2022, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
@ -127,7 +127,8 @@ typedef enum {
HTTPREQ_GET,
HTTPREQ_HEAD,
HTTPREQ_MIMEPOST,
HTTPREQ_SIMPLEPOST
HTTPREQ_SIMPLEPOST,
HTTPREQ_PUT
} HttpReq;

View File

@ -61,7 +61,7 @@ test334 test335 test336 test337 test338 test339 test340 test341 test342 \
test343 test344 test345 test346 test347 test348 test349 test350 test351 \
test352 test353 test354 test355 test356 test357 test358 test359 test360 \
test361 test362 test363 test364 test365 test366 test367 test368 test369 \
test370 test371 test372 test373 test374 test375 test376 \
test370 test371 test372 test373 test374 test375 test376 test378 \
\
test380 test381 test383 test384 test385 test386 \
\

39
tests/data/test378 Normal file
View File

@ -0,0 +1,39 @@
<testcase>
<info>
<keywords>
HTTP PUT
HTTP POST
</keywords>
</info>
#
# Server-side
<reply>
</reply>
#
# Client-side
<client>
<server>
none
</server>
<name>
Reject using -T and -d at once
</name>
<command>
-T log/%TESTNUMBER -d input http://never-accessed
</command>
</client>
#
# Verify data after the test has been "shot"
<verify>
<errorcode>
2
</errorcode>
<stderr mode="text">
Warning: You can only select one HTTP request method! You asked for both PUT
Warning: (-T, --upload-file) and POST (-d, --data).
</stderr>
</verify>
</testcase>