Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/zabbix/zabbix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndris Zeila <andris.zeila@zabbix.com>2020-05-14 12:25:26 +0300
committerAndris Zeila <andris.zeila@zabbix.com>2020-05-14 12:48:10 +0300
commit83ae5328e27eae5a1d452088f48918f80ad6d033 (patch)
tree6f9ce369aec004d0a62d05c6ca3f061218f7e2d1 /src/libs/zbxembed/zabbix.c
parentd887532a0e1cb766abb4d385bd18ae4c2d0a78a7 (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.c14
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.",