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:
-rw-r--r--ChangeLog.d/bugfix/ZBX-198721
-rw-r--r--include/common.h1
-rw-r--r--include/zbxserver.h1
-rw-r--r--src/libs/zbxserver/expression.c29
-rw-r--r--tests/libs/zbxserver/substitute_lld_macros.c4
5 files changed, 9 insertions, 27 deletions
diff --git a/ChangeLog.d/bugfix/ZBX-19872 b/ChangeLog.d/bugfix/ZBX-19872
new file mode 100644
index 00000000000..c91e70b00a0
--- /dev/null
+++ b/ChangeLog.d/bugfix/ZBX-19872
@@ -0,0 +1 @@
+........S. [ZBX-19872] removed redundant escaping in XML data of HTTP agent POST request (asestakovs)
diff --git a/include/common.h b/include/common.h
index a45da89d9cf..d988fe61e5c 100644
--- a/include/common.h
+++ b/include/common.h
@@ -1471,7 +1471,6 @@ int zbx_strcmp_natural(const char *s1, const char *s2);
/* additional token flags */
#define ZBX_TOKEN_JSON 0x0010000
-#define ZBX_TOKEN_XML 0x0020000
#define ZBX_TOKEN_REGEXP 0x0040000
#define ZBX_TOKEN_XPATH 0x0080000
#define ZBX_TOKEN_REGEXP_OUTPUT 0x0100000
diff --git a/include/zbxserver.h b/include/zbxserver.h
index d3062c796ea..5693840d619 100644
--- a/include/zbxserver.h
+++ b/include/zbxserver.h
@@ -122,7 +122,6 @@ int zbx_expression_eval_execute(zbx_expression_eval_t *eval, const zbx_timespec_
/* lld macro context */
#define ZBX_MACRO_ANY (ZBX_TOKEN_LLD_MACRO | ZBX_TOKEN_LLD_FUNC_MACRO | ZBX_TOKEN_USER_MACRO)
#define ZBX_MACRO_JSON (ZBX_MACRO_ANY | ZBX_TOKEN_JSON)
-#define ZBX_MACRO_XML (ZBX_MACRO_ANY | ZBX_TOKEN_XML)
#define ZBX_MACRO_FUNC (ZBX_MACRO_ANY | ZBX_TOKEN_FUNC_MACRO)
int substitute_lld_macros(char **data, const struct zbx_json_parse *jp_row, const zbx_vector_ptr_t *lld_macro_paths,
diff --git a/src/libs/zbxserver/expression.c b/src/libs/zbxserver/expression.c
index 31110c178b2..915f8a1a553 100644
--- a/src/libs/zbxserver/expression.c
+++ b/src/libs/zbxserver/expression.c
@@ -4833,15 +4833,6 @@ static int substitute_simple_macros_impl(const zbx_uint64_t *actionid, const DB_
if (0 != (macro_type & MACRO_TYPE_HTTP_JSON) && NULL != replace_to)
zbx_json_escape(&replace_to);
- if (0 != (macro_type & MACRO_TYPE_HTTP_XML) && NULL != replace_to)
- {
- char *replace_to_esc;
-
- replace_to_esc = xml_escape_dyn(replace_to);
- zbx_free(replace_to);
- replace_to = replace_to_esc;
- }
-
if (ZBX_TOKEN_FUNC_MACRO == token.type && NULL != replace_to)
{
if (SUCCEED != (ret = zbx_calculate_macro_function(*data, &token.data.func_macro, &replace_to)))
@@ -5736,14 +5727,6 @@ static void process_lld_macro_token(char **data, zbx_token_t *token, int flags,
{
zbx_json_escape(&replace_to);
}
- else if (0 != (flags & ZBX_TOKEN_XML))
- {
- char *replace_to_esc;
-
- replace_to_esc = xml_escape_dyn(replace_to);
- zbx_free(replace_to);
- replace_to = replace_to_esc;
- }
else if (0 != (flags & ZBX_TOKEN_REGEXP))
{
zbx_regexp_escape(&replace_to);
@@ -6595,11 +6578,12 @@ static void substitute_macros_in_xml_elements(const DC_ITEM *item, const struct
}
else
{
- substitute_lld_macros(&value_tmp, jp_row, lld_macro_paths, ZBX_MACRO_XML, NULL,
+ substitute_lld_macros(&value_tmp, jp_row, lld_macro_paths, ZBX_MACRO_ANY, NULL,
0);
}
- xmlNodeSetContent(node, (xmlChar *)value_tmp);
+ xmlNodeSetContent(node, NULL);
+ xmlNodeAddContent(node, (xmlChar *)value_tmp);
zbx_free(value_tmp);
xmlFree(value);
@@ -6622,7 +6606,8 @@ static void substitute_macros_in_xml_elements(const DC_ITEM *item, const struct
0);
}
- xmlNodeSetContent(node, (xmlChar *)value_tmp);
+ xmlNodeSetContent(node, NULL);
+ xmlNodeAddContent(node, (xmlChar *)value_tmp);
zbx_free(value_tmp);
xmlFree(value);
@@ -6642,8 +6627,10 @@ static void substitute_macros_in_xml_elements(const DC_ITEM *item, const struct
MACRO_TYPE_HTTP_XML, NULL, 0);
}
else
+ {
substitute_lld_macros(&value_tmp, jp_row, lld_macro_paths,
- ZBX_MACRO_XML, NULL, 0);
+ ZBX_MACRO_ANY, NULL, 0);
+ }
xmlSetProp(node, attr->name, (xmlChar *)value_tmp);
diff --git a/tests/libs/zbxserver/substitute_lld_macros.c b/tests/libs/zbxserver/substitute_lld_macros.c
index 93b3492d8cd..111fb439017 100644
--- a/tests/libs/zbxserver/substitute_lld_macros.c
+++ b/tests/libs/zbxserver/substitute_lld_macros.c
@@ -65,8 +65,6 @@ static int get_flags(const char *path)
fail_msg("Cannot read flag #%d: %s", flags_num, zbx_mock_error_string(err));
else if (0 == strcmp(flag, "ZBX_TOKEN_JSON"))
flags |= ZBX_TOKEN_JSON;
- else if (0 == strcmp(flag, "ZBX_TOKEN_XML"))
- flags |= ZBX_TOKEN_XML;
else if (0 == strcmp(flag, "ZBX_TOKEN_REGEXP"))
flags |= ZBX_TOKEN_REGEXP;
else if (0 == strcmp(flag, "ZBX_TOKEN_XPATH"))
@@ -83,8 +81,6 @@ static int get_flags(const char *path)
flags |= ZBX_MACRO_ANY;
else if (0 == strcmp(flag, "ZBX_MACRO_JSON"))
flags |= ZBX_MACRO_JSON;
- else if (0 == strcmp(flag, "ZBX_MACRO_XML"))
- flags |= ZBX_MACRO_XML;
else if (0 == strcmp(flag, "ZBX_MACRO_FUNC"))
flags |= ZBX_MACRO_FUNC;
else if (0 == strcmp(flag, "ZBX_TOKEN_EXPRESSION_MACRO"))