diff --git a/include/libwebsockets/lws-lejp.h b/include/libwebsockets/lws-lejp.h index faa44abcf..8e502377d 100644 --- a/include/libwebsockets/lws-lejp.h +++ b/include/libwebsockets/lws-lejp.h @@ -263,4 +263,7 @@ lejp_check_path_match(struct lejp_ctx *ctx); LWS_VISIBLE LWS_EXTERN int lejp_get_wildcard(struct lejp_ctx *ctx, int wildcard, char *dest, int len); + +LWS_VISIBLE LWS_EXTERN const char * +lejp_error_to_string(int e); //@} diff --git a/lib/misc/lejp.c b/lib/misc/lejp.c index 677e40aed..370126b6d 100644 --- a/lib/misc/lejp.c +++ b/lib/misc/lejp.c @@ -24,6 +24,33 @@ #include #include +static const char * const parser_errs[] = { + "", + "", + "No opening '{'", + "Expected closing '}'", + "Expected '\"'", + "String underrun", + "Illegal unescaped control char", + "Illegal escape format", + "Illegal hex number", + "Expected ':'", + "Illegal value start", + "Digit required after decimal point", + "Bad number format", + "Bad exponent format", + "Unknown token", + "Too many ']'", + "Mismatched ']'", + "Expected ']'", + "JSON nesting limit exceeded", + "Nesting tracking used up", + "Number too long", + "Comma or block end expected", + "Unknown", + "Parser callback errored (see earlier error)", +}; + /** * lejp_construct - prepare a struct lejp_ctx for use * @@ -753,3 +780,17 @@ reject: ctx->callback(ctx, LEJPCB_FAILED); return ret; } + +const char * +lejp_error_to_string(int e) +{ + if (e > 0) + e = 0; + else + e = -e; + + if (e >= (int)LWS_ARRAY_SIZE(parser_errs)) + return "Unknown error"; + + return parser_errs[e]; +} diff --git a/lib/roles/http/server/lejp-conf.c b/lib/roles/http/server/lejp-conf.c index 489686b79..543fe4794 100644 --- a/lib/roles/http/server/lejp-conf.c +++ b/lib/roles/http/server/lejp-conf.c @@ -188,33 +188,6 @@ enum lejp_vhost_paths { LEJPVP_FLAG_DISABLE_NO_PROTOCOL_WS_UPGRADES, }; -static const char * const parser_errs[] = { - "", - "", - "No opening '{'", - "Expected closing '}'", - "Expected '\"'", - "String underrun", - "Illegal unescaped control char", - "Illegal escape format", - "Illegal hex number", - "Expected ':'", - "Illegal value start", - "Digit required after decimal point", - "Bad number format", - "Bad exponent format", - "Unknown token", - "Too many ']'", - "Mismatched ']'", - "Expected ']'", - "JSON nesting limit exceeded", - "Nesting tracking used up", - "Number too long", - "Comma or block end expected", - "Unknown", - "Parser callback errored (see earlier error)", -}; - #define MAX_PLUGIN_DIRS 10 struct jpargs { @@ -913,7 +886,7 @@ lwsws_get_config(void *user, const char *f, const char * const *paths, if (m < 0) { lwsl_err("%s(%u): parsing error %d: %s\n", f, n, m, - parser_errs[-m]); + lejp_error_to_string(m)); return 2; }