X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-apis.c;h=e8e7ced355aa283735a7f9618bde805f34b3eaae;hb=f3a1fb9e40f2d609d128b7a0b3eb3e963cdea0b5;hp=834850f222490f7743a706a13d3bf8957227cc3a;hpb=7ea1657b459aea2cc6ef9332621a19d7e2676b1d;p=src%2Fapp-framework-binder.git diff --git a/src/afb-apis.c b/src/afb-apis.c index 834850f2..e8e7ced3 100644 --- a/src/afb-apis.c +++ b/src/afb-apis.c @@ -26,7 +26,7 @@ #include "verbose.h" #include "afb-apis.h" #include "afb-context.h" -#include "afb-req-itf.h" +#include struct api_desc { struct afb_api api; @@ -42,16 +42,45 @@ int afb_apis_count() return apis_count; } +int afb_apis_is_valid_api_name(const char *name) +{ + unsigned char c; + + c = (unsigned char)*name; + if (c == 0) + return 0; + do { + if (c < (unsigned char)'\x80') { + switch(c) { + default: + if (c > ' ') + break; + case '"': + case '#': + case '%': + case '&': + case '\'': + case '/': + case '?': + case '`': + case '\\': + case '\x7f': + return 0; + } + } + c = (unsigned char)*++name; + } while(c != 0); + return 1; +} + int afb_apis_add(const char *name, struct afb_api api) { struct api_desc *apis; - size_t len; int i; - /* check existing or not */ - len = strlen(name); - if (len == 0) { - ERROR("empty api name forbidden"); + /* Checks the api name */ + if (!afb_apis_is_valid_api_name(name)) { + ERROR("invalid api name forbidden (name is '%s')", name); goto error; } @@ -74,7 +103,7 @@ int afb_apis_add(const char *name, struct afb_api api) /* record the plugin */ apis = &apis_array[apis_count]; apis->api = api; - apis->namelen = len; + apis->namelen = strlen(name); apis->name = name; apis_count++;