diff options
-rw-r--r-- | mysql-test/r/xml.result | 8 | ||||
-rw-r--r-- | mysql-test/t/xml.test | 5 | ||||
-rw-r--r-- | strings/xml.c | 7 |
3 files changed, 19 insertions, 1 deletions
diff --git a/mysql-test/r/xml.result b/mysql-test/r/xml.result index 4568775d3fd..8ca9ab84bf7 100644 --- a/mysql-test/r/xml.result +++ b/mysql-test/r/xml.result @@ -1124,6 +1124,14 @@ Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: END-OF-INPUT une SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1'); UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1') NULL +# +# Bug#11766725 (bug#59901): EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332 +# +SELECT ExtractValue(CONVERT('<\"', BINARY(10)), 1); +ExtractValue(CONVERT('<\"', BINARY(10)), 1) +NULL +Warnings: +Warning 1525 Incorrect XML value: 'parse error at line 1 pos 11: STRING unexpected (ident or '/' wanted)' End of 5.1 tests # # Start of 5.5 tests diff --git a/mysql-test/t/xml.test b/mysql-test/t/xml.test index 3bc580fe4e5..89c0b8992b1 100644 --- a/mysql-test/t/xml.test +++ b/mysql-test/t/xml.test @@ -646,6 +646,11 @@ SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1)); SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1'); SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1'); +--echo # +--echo # Bug#11766725 (bug#59901): EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332 +--echo # +SELECT ExtractValue(CONVERT('<\"', BINARY(10)), 1); + --echo End of 5.1 tests diff --git a/strings/xml.c b/strings/xml.c index 29ce74e36a0..abe40810a97 100644 --- a/strings/xml.c +++ b/strings/xml.c @@ -165,11 +165,16 @@ static int my_xml_scan(MY_XML_PARSER *p,MY_XML_ATTR *a) } else if ( (p->cur[0] == '"') || (p->cur[0] == '\'') ) { + /* + "string" or 'string' found. + Scan until the closing quote/doublequote, or until the END-OF-INPUT. + */ p->cur++; for (; ( p->cur < p->end ) && (p->cur[0] != a->beg[0]); p->cur++) {} a->end=p->cur; - if (a->beg[0] == p->cur[0])p->cur++; + if (p->cur < p->end) /* Closing quote or doublequote has been found */ + p->cur++; a->beg++; if (!(p->flags & MY_XML_FLAG_SKIP_TEXT_NORMALIZATION)) my_xml_norm_text(a); |