aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_conf_file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ngx_conf_file.c')
-rw-r--r--src/core/ngx_conf_file.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index c26aa1774..70da2dcbe 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -6,10 +6,20 @@
#define MAX_CONF_ERRSTR 256
+/* Ten fixed arguments */
+
static int argument_number[] = {
NGX_CONF_NOARGS,
NGX_CONF_TAKE1,
- NGX_CONF_TAKE2
+ NGX_CONF_TAKE2,
+ NGX_CONF_TAKE3,
+ NGX_CONF_TAKE4,
+ NGX_CONF_TAKE5,
+ NGX_CONF_TAKE6,
+ NGX_CONF_TAKE7,
+ NGX_CONF_TAKE8,
+ NGX_CONF_TAKE9,
+ NGX_CONF_TAKE10
};
static int ngx_conf_read_token(ngx_conf_t *cf);
@@ -146,26 +156,29 @@ ngx_log_debug(cf->log, "command '%s'" _ cmd->name.data);
/* is the directive's argument count right ? */
- if (cmd->type & argument_number[cf->args->nelts - 1]) {
+ if (cmd->type & NGX_CONF_ANY) {
valid = 1;
- } else if (cmd->type & NGX_CONF_1MORE) {
+ } else if (cmd->type & NGX_CONF_FLAG) {
- if (cf->args->nelts != 1) {
+ if (cf->args->nelts == 2) {
valid = 1;
} else {
valid = 0;
}
- } else if (cmd->type & NGX_CONF_FLAG) {
+ } else if (cmd->type & NGX_CONF_1MORE) {
- if (cf->args->nelts == 2) {
+ if (cf->args->nelts != 1) {
valid = 1;
} else {
valid = 0;
}
- } else if (cmd->type & NGX_CONF_ANY) {
+ } else if (cf->args->nelts <= 10
+ && (cmd->type
+ & argument_number[cf->args->nelts - 1]))
+ {
valid = 1;
} else {
@@ -573,8 +586,7 @@ char *ngx_conf_set_str_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
value = (ngx_str_t *) cf->args->elts;
- field->len = value[1].len;
- field->data = value[1].data;
+ *field = value[1];
return NGX_CONF_OK;
}