[libxslt] EXSLT date normalization fix
- From: Daniel Veillard <veillard src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libxslt] EXSLT date normalization fix
- Date: Tue, 4 Sep 2012 12:19:33 +0000 (UTC)
commit 4ad8f1215e624188416d0f913cad972b9807614e
Author: James Muscat <jrem corefiling com>
Date: Tue Sep 4 20:18:04 2012 +0800
EXSLT date normalization fix
https://bugzilla.gnome.org/show_bug.cgi?id=626855
Dates with timezones but no time components are not normalized correctly
Using xsltproc v1.1.26:
$ xsltproc --version
Using libxml 20706, libxslt 10126 and libexslt 815
xsltproc was compiled against libxml 20704, libxslt 10126 and libexslt
815
libxslt 10126 was compiled against libxml 20704
libexslt 815 was compiled against libxml 20704
Dates that have timezone offsets specified but no time components, for
example
"1970-01-01+01:00", are not normalized correctly; the timezone part is
truncated:
date:seconds("1970-01-01") = 0
date:seconds("1970-01-01+01:00") = 0 (not -3600 as expected)
Alters the conditions under which exsltDateNormalize() returns
without normalizing, and adds test cases demonstrating the new behaviour.
libexslt/date.c | 2 +-
tests/exslt/date/seconds.1.out | 16 ++++++++++++++++
tests/exslt/date/seconds.1.xml | 9 +++++++++
3 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/libexslt/date.c b/libexslt/date.c
index b692bb4..18523d0 100644
--- a/libexslt/date.c
+++ b/libexslt/date.c
@@ -1602,7 +1602,7 @@ exsltDateNormalize (exsltDateValPtr dt)
if (dt == NULL)
return;
- if (((dt->type & XS_TIME) != XS_TIME) || (dt->value.date.tzo == 0))
+ if (((dt->type & XS_TIME) != XS_TIME) && (dt->value.date.tzo == 0))
return;
dur = exsltDateCreateDate(XS_DURATION);
diff --git a/tests/exslt/date/seconds.1.out b/tests/exslt/date/seconds.1.out
index 3447bf8..c0eb72c 100644
--- a/tests/exslt/date/seconds.1.out
+++ b/tests/exslt/date/seconds.1.out
@@ -35,3 +35,19 @@ seconds : 0001-01-01T00:00:00
result : -6.21355968e+10
seconds : -0001-01-01T00:00:00
result : -6.21671328e+10
+seconds : 1970-01-01
+result : 0
+seconds : 1970-01-01Z
+result : 0
+seconds : 1970-01-01-11:00
+result : 39600
+seconds : 1970-01-01+11:00
+result : -39600
+seconds : 1970-01-01-12:00
+result : 43200
+seconds : 1970-01-01+12:00
+result : -43200
+seconds : 1970-01-01-13:00
+result : 46800
+seconds : 1970-01-01+13:00
+result : -46800
diff --git a/tests/exslt/date/seconds.1.xml b/tests/exslt/date/seconds.1.xml
index 5e0a664..24d58fb 100644
--- a/tests/exslt/date/seconds.1.xml
+++ b/tests/exslt/date/seconds.1.xml
@@ -20,5 +20,14 @@
<date duration="1971-01-01T00:00:00"/>
<date duration="0001-01-01T00:00:00"/>
<date duration="-0001-01-01T00:00:00"/>
+ <!-- timezones -->
+ <date duration="1970-01-01" />
+ <date duration="1970-01-01Z" />
+ <date duration="1970-01-01-11:00" />
+ <date duration="1970-01-01+11:00" />
+ <date duration="1970-01-01-12:00" />
+ <date duration="1970-01-01+12:00" />
+ <date duration="1970-01-01-13:00" />
+ <date duration="1970-01-01+13:00" />
</page>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]