| Bug #18172 | XML: Extractvalue() accepts mallformed XPath without a XPath syntax error | ||
|---|---|---|---|
| Submitted: | 12 Mar 2006 21:23 | Modified: | 22 Mar 2006 17:31 | 
| Reporter: | Roland Bouman | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: XML functions | Severity: | S3 (Non-critical) | 
| Version: | 5.1.7/5.1.8 BK | OS: | Windows (win xp pro/Linux) | 
| Assigned to: | Alexander Barkov | CPU Architecture: | Any | 
   [13 Mar 2006 0:12]
   MySQL Verification Team        
  Thank you for the bug report.
   [20 Mar 2006 11:05]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/3972
   [21 Mar 2006 11:23]
   Sergei Glukhov        
  ok to push
   [22 Mar 2006 9:05]
   Bugs System        
  A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/4009
   [22 Mar 2006 9:10]
   Alexander Barkov        
  Fixed in 5.1.8
   [22 Mar 2006 17:31]
   Mike Hillyer        
  Documented:
      <listitem>
        <para>
          The <function>EXTRACTVALUE()</function> function did not
          return an error when passed an invalid XPATH string. (Bug
          #18172)
        </para>
      </listitem>
 

Description: ExtractValue can be passed a mallformed XPath expression and no syntax error or warning is generated. How to repeat: mysql> select extractValue('<e><a>1</a></e>','/e/'); +---------------------------------------+ | extractValue('<e><a>1</a></e>','/e/') | +---------------------------------------+ | | +---------------------------------------+ 1 row in set (0.00 sec) (XPath expression should not end with / - ) Suggested fix: generate an error indicating the xpath expression is mallformed. In this case, a abbreviated axis specifier, axis name or abbreviated step should follow the last /