diff options
author | Peter Hartmann <peter.hartmann@nokia.com> | 2010-06-22 11:53:03 (GMT) |
---|---|---|
committer | Peter Hartmann <peter.hartmann@nokia.com> | 2010-08-05 11:39:07 (GMT) |
commit | f3f95d4282ffbfb307e98d20a166ced4cc982061 (patch) | |
tree | 2ebf22bcb63c36867bef46777befe1f8f81c6366 | |
parent | 7de8a0c487ce6a7f13c2028e93648807ef7d8e8b (diff) | |
download | Qt-f3f95d4282ffbfb307e98d20a166ced4cc982061.zip Qt-f3f95d4282ffbfb307e98d20a166ced4cc982061.tar.gz Qt-f3f95d4282ffbfb307e98d20a166ced4cc982061.tar.bz2 |
QXmlPatterns QAbstractDateTime: only parse 3 digits of time fraction
the XML Schema dateTime type allows for an unlimited precision of
fractial time values; this fails for 4 or more digits when creating a
QTime. This patch takes only 3 digits of the time fraction into account,
since we cannot store more in a QTime or QDateTime anyway.
Reviewed-by: Olivier Goffart
Task-number: QTBUG-11559
4 files changed, 20 insertions, 1 deletions
diff --git a/src/xmlpatterns/data/qabstractdatetime.cpp b/src/xmlpatterns/data/qabstractdatetime.cpp index 6329fbe..a298698 100644 --- a/src/xmlpatterns/data/qabstractdatetime.cpp +++ b/src/xmlpatterns/data/qabstractdatetime.cpp @@ -163,7 +163,7 @@ QDateTime AbstractDateTime::create(AtomicValue::Ptr &errorMessage, QString msecondsStr(getSafeCapt(mseconds)); if(!msecondsStr.isEmpty()) - msecondsStr = msecondsStr.leftJustified(3, QLatin1Char('0')); + msecondsStr = msecondsStr.leftJustified(3, QLatin1Char('0'), true); const MSecondProperty msecs = msecondsStr.toInt(); if(hour == 24) diff --git a/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xml b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xml new file mode 100644 index 0000000..b17739a --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xml @@ -0,0 +1 @@ +<date>2009-12-16T23:14:10.823218Z</date> diff --git a/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xsd b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xsd new file mode 100644 index 0000000..55557f1 --- /dev/null +++ b/tests/auto/xmlpatternsvalidator/files/dateTime-with-microseconds.xsd @@ -0,0 +1,12 @@ +<?xml version="1.0"?> +<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + + <xsd:element name="date" type="xsd:dateTime"/> + + <xsd:simpleType name="microsecondsType"> + <xsd:restriction base="xsd:dateTime"> + <xsd:pattern value="\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\d\d\d\dZ"/> + </xsd:restriction> + </xsd:simpleType> + +</xsd:schema> diff --git a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp index 3517b5a..092e966 100644 --- a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp +++ b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp @@ -216,6 +216,12 @@ void tst_XmlPatternsValidator::xsdSupport_data() const << 0 << (QStringList() << QLatin1String("files/complex-type-including-anonymous-type.xsd")) << QString(); + + QTest::newRow("QTBUG-11559 A schema and instance with a dateTime containing microseconds") + << 0 + << (QStringList() << QLatin1String("files/dateTime-with-microseconds.xml") + << QLatin1String("files/dateTime-with-microseconds.xsd")) + << QString(); } QTEST_MAIN(tst_XmlPatternsValidator) |