Unidiff1 files changed, 8 insertions, 6 deletions
|
diff --git a/parsing.c b/parsing.c index 332d61c..8e15e5a 100644 --- a/ parsing.c+++ b/ parsing.c |
|
@@ -64,19 +64,21 @@ int read_config_line(FILE *f, char *line, const char **value, int bufsize) |
64 | |
64 | |
65 | int cgit_read_config(const char *filename, configfn fn) |
65 | int cgit_read_config(const char *filename, configfn fn) |
66 | { |
66 | { |
67 | int ret = 0, len; |
67 | static int nesting; |
| |
68 | int len; |
68 | char line[256]; |
69 | char line[256]; |
69 | const char *value; |
70 | const char *value; |
70 | FILE *f = fopen(filename, "r"); |
71 | FILE *f; |
71 | |
72 | |
72 | if (!f) |
73 | /* cancel the reading of yet another configfile after 16 invocations */ |
| |
74 | if (nesting++ > 16) |
| |
75 | return -1; |
| |
76 | if (!(f = fopen(filename, "r"))) |
73 | return -1; |
77 | return -1; |
74 | |
| |
75 | while((len = read_config_line(f, line, &value, sizeof(line))) > 0) |
78 | while((len = read_config_line(f, line, &value, sizeof(line))) > 0) |
76 | (*fn)(line, value); |
79 | (*fn)(line, value); |
77 | |
| |
78 | fclose(f); |
80 | fclose(f); |
79 | return ret; |
81 | return 0; |
80 | } |
82 | } |
81 | |
83 | |
82 | char *convert_query_hexchar(char *txt) |
84 | char *convert_query_hexchar(char *txt) |
|