diff -r e9ae1318a559 -r b29692d5f7a7 libidav/davqlparser.c --- a/libidav/davqlparser.c Sat May 02 18:32:50 2015 +0200 +++ b/libidav/davqlparser.c Sat May 02 18:44:25 2015 +0200 @@ -704,6 +704,10 @@ "FROM", sfmtarg(tokendata)).ptr; return 0; } + default: + stmt->errorcode = DAVQL_ERROR_INVALID; + stmt->errormessage = strdup(_parser_state); + return 0; } } @@ -761,18 +765,17 @@ if (!sstrcasecmp(tokendata, S("depth"))) { state->key = 1; state->step = 1; + if (state->keymask & state->key) { + stmt->errorcode = DAVQL_ERROR_DUPLICATED_ATTRIBUTE; + stmt->errormessage = ucx_sprintf(_duplicated_attribute, + sfmtarg(tokendata)).ptr; + } else { + state->keymask |= state->key; + } } else { stmt->errorcode = DAVQL_ERROR_UNKNOWN_ATTRIBUTE; stmt->errormessage = ucx_sprintf(_unknown_attribute, sfmtarg(tokendata)).ptr; - break; - } - if (state->keymask & state->key) { - stmt->errorcode = DAVQL_ERROR_DUPLICATED_ATTRIBUTE; - stmt->errormessage = ucx_sprintf(_duplicated_attribute, - sfmtarg(tokendata)).ptr; - } else { - state->keymask |= state->key; } return _step_WITH_; // continue parsing WITH clause case 1: