diff options
author | Andris Zeila <andris.zeila@zabbix.com> | 2020-05-14 12:25:26 +0300 |
---|---|---|
committer | Andris Zeila <andris.zeila@zabbix.com> | 2020-05-14 12:48:10 +0300 |
commit | 83ae5328e27eae5a1d452088f48918f80ad6d033 (patch) | |
tree | 6f9ce369aec004d0a62d05c6ca3f061218f7e2d1 /src/libs/zbxembed/zabbix.c | |
parent | d887532a0e1cb766abb4d385bd18ae4c2d0a78a7 (diff) |
.......PS. [ZBX-17227] fixed 4-byte utf-8 sequence handling in embedded scripts
* commit '9fbe7626d48c23d8483af888aadd4d534499d519':
.......... [ZBX-17227] added changelog entry
.......PS. [ZBX-17227] changed cesu8-utf8 conversion to generate error on 4-byte sequences, fixed coding style issues
.......PS. [ZBX-17227] added cesu8->utf8 conversion to atob/btoa functions
.......PS. [ZBX-17227] added cesu8->utf8 conversion when duktape strings are passed to other functions
.......PS. [ZBX-17227] convert data from cesu8 to utf8
(cherry picked from commit 6d241bf6ab5200cee61c8c35b22f4ce098cdd11c)
Diffstat (limited to 'src/libs/zbxembed/zabbix.c')
-rw-r--r-- | src/libs/zbxembed/zabbix.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/libs/zbxembed/zabbix.c b/src/libs/zbxembed/zabbix.c index 61a6ba302d9..ee487552df6 100644 --- a/src/libs/zbxembed/zabbix.c +++ b/src/libs/zbxembed/zabbix.c @@ -69,12 +69,17 @@ static duk_ret_t es_zabbix_ctor(duk_context *ctx) static duk_ret_t es_zabbix_log(duk_context *ctx) { zbx_es_env_t *env; - const char *message; + char *message = NULL; int level; duk_memory_functions out_funcs; level = duk_to_int(ctx, 0); - message = duk_to_string(ctx, 1); + + if (SUCCEED != zbx_cesu8_to_utf8(duk_to_string(ctx, 1), &message)) + { + message = zbx_strdup(message, duk_to_string(ctx, 1)); + zbx_replace_invalid_utf8(message); + } zabbix_log(level, "%s", message); @@ -82,7 +87,10 @@ static duk_ret_t es_zabbix_log(duk_context *ctx) env = (zbx_es_env_t *)out_funcs.udata; if (NULL == env->json) + { + zbx_free(message); return 0; + } zbx_json_addobject(env->json, NULL); zbx_json_adduint64(env->json, "level", (zbx_uint64_t)level); @@ -90,6 +98,8 @@ static duk_ret_t es_zabbix_log(duk_context *ctx) zbx_json_addstring(env->json, "message", message, ZBX_JSON_TYPE_STRING); zbx_json_close(env->json); + zbx_free(message); + if (ZBX_ES_LOG_MEMORY_LIMIT < env->json->buffer_size) /* approximate limit */ { return duk_error(ctx, DUK_RET_TYPE_ERROR, "log exceeds the maximum size of " ZBX_FS_UI64 " bytes.", |