From ea8afbf980802da1eb9396705c932b47814bfc72 Mon Sep 17 00:00:00 2001 From: Amin Ben Romdhane Date: Sun, 26 Mar 2023 22:13:09 +0000 Subject: [PATCH] Return error if the called path is invalid wildcard path --- dmentry.c | 9 ++------- libbbf_api/dmbbf.c | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/dmentry.c b/dmentry.c index 65293b22..44698bb2 100644 --- a/dmentry.c +++ b/dmentry.c @@ -275,15 +275,10 @@ int dm_entry_param_method(struct dmctx *ctx, int cmd, char *inparam, char *arg1, switch(cmd) { case CMD_GET_VALUE: - if (ctx->in_param[0] == '.' && DM_STRLEN(ctx->in_param) == 1) - fault = FAULT_9005; - else - fault = dm_entry_get_value(ctx); + fault = dm_entry_get_value(ctx); break; case CMD_GET_NAME: - if (ctx->in_param[0] == '.' && DM_STRLEN(ctx->in_param) == 1) - fault = FAULT_9005; - else if (arg1 && string_to_bool(arg1, &ctx->nextlevel) == 0) + if (arg1 && string_to_bool(arg1, &ctx->nextlevel) == 0) fault = dm_entry_get_name(ctx); else fault = FAULT_9003; diff --git a/libbbf_api/dmbbf.c b/libbbf_api/dmbbf.c index 2b2b07f3..779f1b61 100644 --- a/libbbf_api/dmbbf.c +++ b/libbbf_api/dmbbf.c @@ -1296,6 +1296,11 @@ int dm_entry_get_value(struct dmctx *dmctx) unsigned char findparam_check = 0; DMOBJ *root = dmctx->dm_entryobj; DMNODE node = {.current_object = ""}; + unsigned int len = DM_STRLEN(dmctx->in_param); + + if ((len > 2 && dmctx->in_param[len - 1] == '.' && dmctx->in_param[len - 2] == '*') || + (dmctx->in_param[0] == '.' && len == 1)) + return FAULT_9005; if (dmctx->in_param[0] == '\0' || rootcmp(dmctx->in_param, root->obj) == 0) { dmctx->inparam_isparam = 0; @@ -1306,7 +1311,7 @@ int dm_entry_get_value(struct dmctx *dmctx) dmctx->findparam = 1; dmctx->stop = 0; findparam_check = 1; - } else if (dmctx->in_param[DM_STRLEN(dmctx->in_param) - 1] == '.') { + } else if (dmctx->in_param[len - 1] == '.') { dmctx->inparam_isparam = 0; dmctx->findparam = 0; dmctx->stop = 0; @@ -1406,8 +1411,13 @@ int dm_entry_get_name(struct dmctx *ctx) DMOBJ *root = ctx->dm_entryobj; DMNODE node = {.current_object = ""}; unsigned char findparam_check = 0; + unsigned int len = DM_STRLEN(ctx->in_param); int err = 0; + if ((len > 2 && ctx->in_param[len - 1] == '.' && ctx->in_param[len - 2] == '*') || + (ctx->in_param[0] == '.' && len == 1)) + return FAULT_9005; + if (ctx->nextlevel == 0 && (ctx->in_param[0] == '\0' || rootcmp(ctx->in_param, root->obj) == 0)) { ctx->inparam_isparam = 0; ctx->findparam = 1; @@ -1427,7 +1437,7 @@ int dm_entry_get_name(struct dmctx *ctx) ctx->in_param = root->obj; node.matched = 1; findparam_check = 1; - } else if (*(ctx->in_param + DM_STRLEN(ctx->in_param) - 1) == '.') { + } else if (*(ctx->in_param + len - 1) == '.') { ctx->inparam_isparam = 0; ctx->findparam = 0; ctx->stop = 0;