- From: <bugzilla@wiggum.w3.org>
- Date: Mon, 13 Oct 2008 21:16:58 +0000
- To: public-qt-comments@w3.org
http://www.w3.org/Bugs/Public/show_bug.cgi?id=6160
Summary: [FS] 7.1.1 The fs:convert-operand function: incorrect
type rules
Product: XPath / XQuery / XSLT
Version: Recommendation
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: Formal Semantics
AssignedTo: jmdyck@ibiblio.org
ReportedBy: jmdyck@ibiblio.org
QAContact: public-qt-comments@w3.org
(This bug is extracted from Bug 5915 comment #2, where it's secondary to
that bug's main point.)
Consider the query:
let $x := if (1) then text{"42"} else 3.14
return -$x
which normalizes to something like:
let $x := if (1) then text{"42"} else 3.14
return fs:unary-minus( fs:convert-operand( fn:data($x), 1.0E0 ) )
We can infer the following static types:
text{"42"} : text?
3.14 : xs:decimal
if (1) then text{"42"} else 3.14 : text? | xs:decimal
$x : text? | xs:decimal
fn:data($x) : (xs:untypedAtomic | xs:decimal)?
The last of these types becomes 'Type1' in the Static Type Analysis rules
for fs:convert-operand (FS 7.1.1). Note that
Type1 <: xs:untypedAtomic?
does not hold (because of the presence of xs:decimal in Type1), and so
only the first of the four rules applies:
statEnv |- not(Type1 <: xs:untypedAtomic?)
------------------------------------------------------------
statEnv |- (FS-URI,"convert-operand")( Type1, Type2) : Type1
Thus the static type of the call to fs:convert-operand is also inferred to
be:
(xs:untypedAtomic | xs:decimal)?
On the other hand, we know that dynamically:
$x is bound to a text node,
fn:data($x) yields "42" as an xs:untypedAtomic, and
fs:convert-operand returns that value cast to xs:double.
Since the value of the call does not belong to the static type for
the call, this is a violation of type soundness. The rules for
fs:convert-operand need to be changed to properly handle such cases.
--
Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
Received on Monday, 13 October 2008 21:25:08 UTC