Skip to content

Commit

Permalink
parseconfig: dash options can't specified with colon or equals
Browse files Browse the repository at this point in the history
Bug: http://curl.haxx.se/bug/view.cgi?id=1297
Reported-by: Michael Osipov
  • Loading branch information
bagder committed Nov 29, 2013
1 parent d81cbbc commit 0db811b
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 16 deletions.
28 changes: 15 additions & 13 deletions docs/curl.1
Expand Up @@ -722,16 +722,21 @@ See this online resource for further details:
.IP "-K, --config <config file>"
Specify which config file to read curl arguments from. The config file is a
text file in which command line arguments can be written which then will be
used as if they were written on the actual command line. Options and their
parameters must be specified on the same config file line, separated by
whitespace, colon, the equals sign or any combination thereof (however,
the preferred separator is the equals sign). If the parameter is to contain
whitespace, the parameter must be enclosed within quotes. Within double
quotes, the following escape sequences are available: \\\\, \\", \\t, \\n,
\\r and \\v. A backslash preceding any other letter is ignored. If the
first column of a config line is a '#' character, the rest of the line will be
treated as a comment. Only write one option per physical line in the config
file.
used as if they were written on the actual command line.

Options and their parameters must be specified on the same config file line,
separated by whitespace, colon, or the equals sign. Long option names can
optionally be given in the config file without the initial double dashes and
if so, the colon or equals characters can be used as separators. If the option
is specified with one or two dashes, there can be no colon or equals character
between the option and its parameter.

If the parameter is to contain whitespace, the parameter must be enclosed
within quotes. Within double quotes, the following escape sequences are
available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash preceding any other
letter is ignored. If the first column of a config line is a '#' character,
the rest of the line will be treated as a comment. Only write one option per
physical line in the config file.

Specify the filename to -K, --config as '-' to make curl read the file from
stdin.
Expand All @@ -742,9 +747,6 @@ line. So, it could look similar to this:

url = "http://curl.haxx.se/docs/"

Long option names can optionally be given in the config file without the
initial double dashes.

When curl is invoked, it always (unless \fI-q\fP is used) checks for a default
config file and uses it if found. The default config file is checked for in
the following places in this order:
Expand Down
14 changes: 11 additions & 3 deletions src/tool_parsecfg.c
Expand Up @@ -35,7 +35,10 @@
#include "memdebug.h" /* keep this as LAST include */

#define CURLRC DOT_CHAR "curlrc"
#define ISSEP(x) (((x) == '=') || ((x) == ':'))

/* only acknowledge colon or equals as separators if the option was not
specified with an initial dash! */
#define ISSEP(x,dash) (!dash && (((x) == '=') || ((x) == ':')))

static const char *unslashquote(const char *line, char *param);
static char *my_get_line(FILE *fp);
Expand Down Expand Up @@ -123,6 +126,7 @@ int parseconfig(const char *filename,
char *param;
int lineno = 0;
bool alloced_param;
bool dashed_option;

while(NULL != (aline = my_get_line(file))) {
lineno++;
Expand All @@ -146,7 +150,11 @@ int parseconfig(const char *filename,

/* the option keywords starts here */
option = line;
while(*line && !ISSPACE(*line) && !ISSEP(*line))

/* the option starts with a dash? */
dashed_option = option[0]=='-'?TRUE:FALSE;

while(*line && !ISSPACE(*line) && !ISSEP(*line, dashed_option))
line++;
/* ... and has ended here */

Expand All @@ -158,7 +166,7 @@ int parseconfig(const char *filename,
#endif

/* pass spaces and separator(s) */
while(*line && (ISSPACE(*line) || ISSEP(*line)))
while(*line && (ISSPACE(*line) || ISSEP(*line, dashed_option)))
line++;

/* the parameter starts here (unless quoted) */
Expand Down

0 comments on commit 0db811b

Please sign in to comment.