mirror of
https://github.com/curl/curl.git
synced 2026-07-05 18:47:17 +03:00
tool: improve config error messaging
- make sure that errors for specific options in config files identify the file, line number and shows the error about the correct option - improve some error message wording - add warning for leading single quote of arguments in config files (verified in test 1712) - adjust test error outputs accordingly Fixes #20598 Closes #20666
This commit is contained in:
parent
9ce9afa312
commit
4c5a9208f5
6 changed files with 78 additions and 9 deletions
|
|
@ -336,6 +336,7 @@ struct LongShort {
|
|||
typedef enum {
|
||||
PARAM_OK = 0,
|
||||
PARAM_OPTION_UNKNOWN,
|
||||
PARAM_CONFIG_OPTION_UNKNOWN,
|
||||
PARAM_REQUIRES_PARAMETER,
|
||||
PARAM_BAD_USE,
|
||||
PARAM_HELP_REQUESTED,
|
||||
|
|
|
|||
|
|
@ -39,6 +39,8 @@ const char *param2text(ParameterError error)
|
|||
return "had unsupported trailing garbage";
|
||||
case PARAM_OPTION_UNKNOWN:
|
||||
return "is unknown";
|
||||
case PARAM_CONFIG_OPTION_UNKNOWN:
|
||||
return "found an unknown config option";
|
||||
case PARAM_REQUIRES_PARAMETER:
|
||||
return "requires parameter";
|
||||
case PARAM_BAD_USE:
|
||||
|
|
|
|||
|
|
@ -172,6 +172,11 @@ ParameterError parseconfig(const char *filename, int max_recursive,
|
|||
param = curlx_dyn_len(&pbuf) ? curlx_dyn_ptr(&pbuf) : CURL_UNCONST("");
|
||||
}
|
||||
else {
|
||||
if(*line == '\'') {
|
||||
warnf("%s:%d Option '%s' uses argument with leading single quote. "
|
||||
"It is probably a mistake. Consider double quotes.",
|
||||
filename, lineno, option);
|
||||
}
|
||||
param = line; /* parameter starts here */
|
||||
while(*line && !ISSPACE(*line)) /* stop also on CRLF */
|
||||
line++;
|
||||
|
|
@ -192,7 +197,7 @@ ParameterError parseconfig(const char *filename, int max_recursive,
|
|||
case '#': /* comment */
|
||||
break;
|
||||
default:
|
||||
warnf("%s:%d: warning: '%s' uses unquoted whitespace. "
|
||||
warnf("%s:%d Option '%s' uses argument with unquoted whitespace. "
|
||||
"This may cause side-effects. Consider double quotes.",
|
||||
filename, lineno, option);
|
||||
}
|
||||
|
|
@ -240,11 +245,11 @@ ParameterError parseconfig(const char *filename, int max_recursive,
|
|||
res != PARAM_VERSION_INFO_REQUESTED &&
|
||||
res != PARAM_ENGINES_REQUESTED &&
|
||||
res != PARAM_CA_EMBED_REQUESTED) {
|
||||
/* only show error in the first level config call */
|
||||
if(max_recursive == CONFIG_MAX_LEVELS) {
|
||||
const char *reason = param2text(res);
|
||||
errorf("%s:%d: '%s' %s", filename, lineno, option, reason);
|
||||
}
|
||||
const char *reason = param2text(res);
|
||||
errorf("%s:%d config file option '%s' %s",
|
||||
filename, lineno, option, reason);
|
||||
if(res == PARAM_OPTION_UNKNOWN)
|
||||
res = PARAM_CONFIG_OPTION_UNKNOWN;
|
||||
err = res;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ test1670 test1671 \
|
|||
test1680 test1681 test1682 test1683 \
|
||||
\
|
||||
test1700 test1701 test1702 test1703 test1704 test1705 test1706 test1707 \
|
||||
test1708 test1709 test1710 test1711 \
|
||||
test1708 test1709 test1710 test1711 test1712 \
|
||||
\
|
||||
test1800 test1801 test1802 test1847 test1848 \
|
||||
\
|
||||
|
|
|
|||
61
tests/data/test1712
Normal file
61
tests/data/test1712
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="US-ASCII"?>
|
||||
<testcase>
|
||||
<info>
|
||||
<keywords>
|
||||
HTTP
|
||||
--config
|
||||
</keywords>
|
||||
</info>
|
||||
|
||||
# Server-side
|
||||
<reply>
|
||||
<data crlf="headers">
|
||||
HTTP/1.1 200 OK
|
||||
Date: Tue, 09 Nov 2010 14:49:00 GMT
|
||||
Server: test-server/fake
|
||||
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
|
||||
ETag: "21025-dc7-39462498"
|
||||
Accept-Ranges: bytes
|
||||
Content-Length: 6
|
||||
Connection: close
|
||||
Content-Type: text/html
|
||||
Funny-head: yesyes
|
||||
|
||||
-foo-
|
||||
</data>
|
||||
</reply>
|
||||
|
||||
# Client-side
|
||||
<client>
|
||||
<server>
|
||||
http
|
||||
</server>
|
||||
<name>
|
||||
config file with argument using single quotes
|
||||
</name>
|
||||
<file name="%LOGDIR/config">
|
||||
data = 'arg-with-quote'
|
||||
</file>
|
||||
<command>
|
||||
http://%HOSTIP:%HTTPPORT/%TESTNUMBER --config %LOGDIR/config --silent
|
||||
</command>
|
||||
</client>
|
||||
|
||||
# Verify data after the test has been "shot"
|
||||
<verify>
|
||||
<protocol crlf="yes" nonewline="yes">
|
||||
POST /%TESTNUMBER HTTP/1.1
|
||||
Host: %HOSTIP:%HTTPPORT
|
||||
User-Agent: curl/%VERSION
|
||||
Accept: */*
|
||||
Content-Length: 16
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
'arg-with-quote'
|
||||
</protocol>
|
||||
<stderr mode="text">
|
||||
Warning: %LOGDIR/config:1 Option 'data' uses argument with leading single quote.%SP
|
||||
Warning: It is probably a mistake. Consider double quotes.
|
||||
</stderr>
|
||||
</verify>
|
||||
</testcase>
|
||||
|
|
@ -54,8 +54,8 @@ Content-Type: application/x-www-form-urlencoded
|
|||
arg
|
||||
</protocol>
|
||||
<stderr mode="text">
|
||||
Warning: %LOGDIR/config:1: warning: 'data' uses unquoted whitespace. This may%SP
|
||||
Warning: cause side-effects. Consider double quotes.
|
||||
Warning: %LOGDIR/config:1 Option 'data' uses argument with unquoted whitespace.%SP
|
||||
Warning: This may cause side-effects. Consider double quotes.
|
||||
</stderr>
|
||||
</verify>
|
||||
</testcase>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue