mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
Merge remote-tracking branch 'origin/maint-0.2.4'
This commit is contained in:
commit
acbfc9c8cc
4
changes/bug7950
Normal file
4
changes/bug7950
Normal file
@ -0,0 +1,4 @@
|
||||
o Minor bugfixes:
|
||||
- When rejecting a configuration because we were unable to parse a
|
||||
quoted string, log an actual error message. Fix for bug 7950;
|
||||
bugfix on 0.2.0.16-alpha.
|
@ -2501,10 +2501,13 @@ unescape_string(const char *s, char **result, size_t *size_out)
|
||||
* key portion and *<b>value_out</b> to a new string holding the value portion
|
||||
* of the line, and return a pointer to the start of the next line. If we run
|
||||
* out of data, return a pointer to the end of the string. If we encounter an
|
||||
* error, return NULL.
|
||||
* error, return NULL and set *<b>err_out</b> (if provided) to an error
|
||||
* message.
|
||||
*/
|
||||
const char *
|
||||
parse_config_line_from_str(const char *line, char **key_out, char **value_out)
|
||||
parse_config_line_from_str_verbose(const char *line, char **key_out,
|
||||
char **value_out,
|
||||
const char **err_out)
|
||||
{
|
||||
/* I believe the file format here is supposed to be:
|
||||
FILE = (EMPTYLINE | LINE)* (EMPTYLASTLINE | LASTLINE)?
|
||||
@ -2578,12 +2581,18 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
|
||||
|
||||
/* Find the end of the line. */
|
||||
if (*line == '\"') { // XXX No continuation handling is done here
|
||||
if (!(line = unescape_string(line, value_out, NULL)))
|
||||
return NULL;
|
||||
if (!(line = unescape_string(line, value_out, NULL))) {
|
||||
if (err_out)
|
||||
*err_out = "Invalid escape sequence in quoted string";
|
||||
return NULL;
|
||||
}
|
||||
while (*line == ' ' || *line == '\t')
|
||||
++line;
|
||||
if (*line && *line != '#' && *line != '\n')
|
||||
if (*line && *line != '#' && *line != '\n') {
|
||||
if (err_out)
|
||||
*err_out = "Excess data after quoted string";
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
/* Look for the end of the line. */
|
||||
while (*line && *line != '\n' && (*line != '#' || continuation)) {
|
||||
|
@ -373,8 +373,11 @@ char *read_file_to_str(const char *filename, int flags, struct stat *stat_out)
|
||||
char *read_file_to_str_until_eof(int fd, size_t max_bytes_to_read,
|
||||
size_t *sz_out)
|
||||
ATTR_MALLOC;
|
||||
const char *parse_config_line_from_str(const char *line,
|
||||
char **key_out, char **value_out);
|
||||
const char *parse_config_line_from_str_verbose(const char *line,
|
||||
char **key_out, char **value_out,
|
||||
const char **err_out);
|
||||
#define parse_config_line_from_str(line,key_out,value_out) \
|
||||
parse_config_line_from_str_verbose((line),(key_out),(value_out),NULL)
|
||||
char *expand_filename(const char *filename);
|
||||
struct smartlist_t *tor_listdir(const char *dirname);
|
||||
int path_is_relative(const char *filename);
|
||||
|
@ -91,12 +91,15 @@ config_get_lines(const char *string, config_line_t **result, int extended)
|
||||
{
|
||||
config_line_t *list = NULL, **next;
|
||||
char *k, *v;
|
||||
const char *parse_err;
|
||||
|
||||
next = &list;
|
||||
do {
|
||||
k = v = NULL;
|
||||
string = parse_config_line_from_str(string, &k, &v);
|
||||
string = parse_config_line_from_str_verbose(string, &k, &v, &parse_err);
|
||||
if (!string) {
|
||||
log_warn(LD_CONFIG, "Error while parsing configuration: %s",
|
||||
parse_err?parse_err:"<unknown>");
|
||||
config_free_lines(list);
|
||||
tor_free(k);
|
||||
tor_free(v);
|
||||
|
Loading…
Reference in New Issue
Block a user