summaryrefslogtreecommitdiff
path: root/sql/item_xmlfunc.cc
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2020-05-20 13:34:51 +0200
committerOleksandr Byelkin <sanja@mariadb.com>2020-05-24 21:27:08 +0200
commitcf52dd174ecf0e6055f4443be9c1fea8bc37b65e (patch)
tree63eba68da735d7d8280e624ae1be9a3d3f78588b /sql/item_xmlfunc.cc
parentd8e2fa0c49d506bde037fe448dc9840e8e14cf92 (diff)
downloadmariadb-git-cf52dd174ecf0e6055f4443be9c1fea8bc37b65e.tar.gz
MDEV-22545: my_vsnprintf behaves not as in C standard
Added parameter %T for string which should be visibly truncated.
Diffstat (limited to 'sql/item_xmlfunc.cc')
-rw-r--r--sql/item_xmlfunc.cc34
1 files changed, 23 insertions, 11 deletions
diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc
index 0e62e29bfe2..9cc123e57d6 100644
--- a/sql/item_xmlfunc.cc
+++ b/sql/item_xmlfunc.cc
@@ -997,11 +997,16 @@ static Item *create_comparator(MY_XPATH *xpath,
b->type() == Item::XPATH_NODESET)
{
uint len= (uint)(xpath->query.end - context->beg);
- set_if_smaller(len, 32);
- my_printf_error(ER_UNKNOWN_ERROR,
- "XPATH error: "
- "comparison of two nodesets is not supported: '%.*s'",
- MYF(0), len, context->beg);
+ if (len <= 32)
+ my_printf_error(ER_UNKNOWN_ERROR,
+ "XPATH error: "
+ "comparison of two nodesets is not supported: '%.*s'",
+ MYF(0), len, context->beg);
+ else
+ my_printf_error(ER_UNKNOWN_ERROR,
+ "XPATH error: "
+ "comparison of two nodesets is not supported: '%.32T'",
+ MYF(0), context->beg);
return 0; // TODO: Comparison of two nodesets
}
@@ -2634,9 +2639,12 @@ my_xpath_parse_VariableReference(MY_XPATH *xpath)
xpath->item= NULL;
DBUG_ASSERT(xpath->query.end > dollar_pos);
uint len= (uint)(xpath->query.end - dollar_pos);
- set_if_smaller(len, 32);
- my_printf_error(ER_UNKNOWN_ERROR, "Unknown XPATH variable at: '%.*s'",
- MYF(0), len, dollar_pos);
+ if (len <= 32)
+ my_printf_error(ER_UNKNOWN_ERROR, "Unknown XPATH variable at: '%.*s'",
+ MYF(0), len, dollar_pos);
+ else
+ my_printf_error(ER_UNKNOWN_ERROR, "Unknown XPATH variable at: '%.32T'",
+ MYF(0), dollar_pos);
}
}
return xpath->item ? 1 : 0;
@@ -2767,9 +2775,13 @@ bool Item_xml_str_func::fix_fields(THD *thd, Item **ref)
if (!rc)
{
uint clen= (uint)(xpath.query.end - xpath.lasttok.beg);
- set_if_smaller(clen, 32);
- my_printf_error(ER_UNKNOWN_ERROR, "XPATH syntax error: '%.*s'",
- MYF(0), clen, xpath.lasttok.beg);
+ if (clen <= 32)
+ my_printf_error(ER_UNKNOWN_ERROR, "XPATH syntax error: '%.*s'",
+ MYF(0), clen, xpath.lasttok.beg);
+ else
+ my_printf_error(ER_UNKNOWN_ERROR, "XPATH syntax error: '%.32T'",
+ MYF(0), xpath.lasttok.beg);
+
return true;
}