mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Bug#18201: XML: ExtractValue works even if the xml
fragment is not well-formed xml
Problem:
- ExtractValue silently returned NULL if a wrong XML value is passed.
- In some cases "unexpected END-OF-INPUT" error was not detected, and
a non-NULL result could be returned for a bad XML value.
Fix:
- Adding warning messages, to make user aware why NULL was returned.
- Missing "unexpected END-OF-INPUT" error is reported now.
mysql-test/r/xml.result:
- Fixing XML systax error in old test
- Adding test cases.
mysql-test/t/xml.test:
- Fixing XML systax error in old test
- Adding test cases.
sql/item_xmlfunc.cc:
Produce warning in case of XML systax error,
instead of silentrly returning NULL.
strings/xml.c:
- Making error messages better looking and clearer:
It is important because now they're seen in SHOW WARNINGS
(previously they were used only for debugging purposes).
- Adding "unexpected END-OF-INPUT" error if after scanning
closing tag for the root element some input is left
(previously this error was ignored in a mistake).
This commit is contained in:
@@ -53,7 +53,7 @@ SELECT extractValue(@xml,'/a//@x');
|
||||
SELECT extractValue(@xml,'/a//@x[1]');
|
||||
SELECT extractValue(@xml,'/a//@x[2]');
|
||||
|
||||
SET @xml='<a><b>b1</b><b>b2</b><c><b>c1b1</b><b>c1b2</b></c><c><b>c2b1</c></b>/a>';
|
||||
SET @xml='<a><b>b1</b><b>b2</b><c><b>c1b1</b><b>c1b2</b></c><c><b>c2b1</c></b></a>';
|
||||
SELECT extractValue(@xml,'//b[1]');
|
||||
SELECT extractValue(@xml,'/descendant::b[1]');
|
||||
|
||||
@@ -284,6 +284,17 @@ select extractvalue('<a>Jack</a>' collate latin1_bin,'/a[contains(../a,"j")]');
|
||||
#
|
||||
select ExtractValue('<tag1><![CDATA[test]]></tag1>','/tag1');
|
||||
|
||||
#
|
||||
# Bug#18201: XML: ExtractValue works even if the xml fragment
|
||||
# is not well-formed xml
|
||||
#
|
||||
select extractValue('<a>a','/a');
|
||||
select extractValue('<a>a<','/a');
|
||||
select extractValue('<a>a</','/a');
|
||||
select extractValue('<a>a</a','/a');
|
||||
select extractValue('<a>a</a></b>','/a');
|
||||
select extractValue('<a b=>a</a>','/a');
|
||||
|
||||
#
|
||||
# Bug #18171 XML: ExtractValue: the XPath position()
|
||||
# function crashes the server!
|
||||
|
||||
Reference in New Issue
Block a user